このソリューションに取り組む前に、コミュニティで実行してフィードバックを得たいと思いました。
質問:
- 私のアプローチは実現可能ですか?つまり、この方法でも実行できますか?
- それは正しい/最も効率的なソリューションですか?
- それが適切な解決策ではない場合、より良いアプローチは何でしょうか?
問題:
- アプリケーションを介して大量の電子メールを送信する必要があります。
- 共有ホスト サーバーでは、スパマーとして分類される前に、1 時間あたり最大 500 通の電子メールしか送信できません。
- バッチメール送信中のサーバータイムアウト
提案された解決策:
タスクが送信されると (つまり、ユーザーがフォームとフロントエンド テンプレートを使用して必要なすべての電子メール情報を提供し、ターゲット オーディエンスを選択するなど)、アクションは次のようになります。
- 電子メールが送信される (保存された連絡先のデータベースからの) レコードの数を決定します
- 上記 #1 のレコード数が 400 を超える場合:
- DB 内のこれらすべてのレコードにバッチ番号を割り当てます。
- 次の CRON ジョブを実行します。
- 1 時間ごとに、バッチ「X」で 400 レコードを選択し、バッチ「X」のレコードがなくなるまで、保存された電子メール テンプレートを送信します。400 のバッチが送信されるたびに、そのバッチ番号が消去されます (したがって、次の時間に再び選択されることはありません)。
- その前にスケジュールされている (つまり、現在実行中の) 未完了の CRON JOB がある場合、それはキューに入れられます。
その他の説明: これらの電子メールを送信するには、次のコードを使用して SWIFT メーラーを反復するだけです。
foreach($list as $record)
{
mailers::sendMemberSpam($record, $emailParamsArray);
// where the above simply contains: sfContext::getInstance()->getMailer()->send($message);
}
* $list は、batch_number が「X」のレコードのリストです。
これが最も効率的なソリューションであるかどうかはわかりません。サーバーが停止しているように見え、リストや電子メールが長い場合は最終的にタイムアウトになるからです。
ですから、現時点で意見を求めているだけです...よろしくお願いします。