ニュースレターの購読者がいる2000のメーリングリストがあり、それらを大量にメールで送信する必要があると仮定します。サーバーには、スパムを防ぐために電子メールを送信するときに1時間ごとの制限があります。
1時間に300通または500通の電子メールを送信するものもありますが、これは十分に公平です。
swiftmailerスロットルプラグインを使用して、たとえば1分あたり8通の電子メール(8 *60分=500の制限を下回る合計480通のメール)を送信している間、サーバーは接続を閉じ、「404-見つかりませんページ」で応答します。
奇妙なことに、スクリプトの実行中に100以下の電子メールを送信しましたが、サーバーはプロシージャを無限ループに陥ったため処理し、スクリプトの実行を終了します。
スロットルプラグインなしで一度に500通のメールを送信しようとすると、それは魅力のように機能します。しかし、1500や2000などのメールをさらに送信する必要がある場合はどうなりますか?
スロットルプラグインがPHPのネイティブ関数sleep()
を使用していることを読みました。これは、このような状況で適切に機能するはずです。
プロセスがHTTPプロトコルではなくCronJobを介して実行されれば、機能する可能性があるとのことです。wgetとcurlを使用してcronジョブを設定しようとしましたが、それでもうまくいきません。
私が行った調査から学んだことは、SwiftmailerでSMTPサーバーを使用する場合、3秒のプロセスに28秒かかることです(必要以上に長くなります)。すべてのクエリはすべて最適化され、すべてのデータはサーバーに過負荷をかけることなくメモリに適切に配置されます。
その後、SMTPを使用せずに試してみることにしましたが、Throttlerプラグインは(再び)正常に機能しませんでした。
任意の提案や推奨事項をいただければ幸いです。
編集:私もこれを読みました:SwiftMailerバッチ電子メールは私のサーバーをタイムアウトします
もちろん、私はこれを使用します:
ignore_user_abort(true);
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 500);
PS:今のところ、スクリプトの動作を変更して、1分あたりの電子メールのユーザー入力に基づいてサーバーの制限を計算し、アクティブなサブスクライバーの総数が送信される電子メールに対して少ないか等しい場合は、スロットルプラグインなしでそれらを送信します。
よろしくお願いいたします。GeorgeGirtsou