0

このソリューションに取り組む前に、コミュニティで実行してフィードバックを得たいと思いました。

質問:

  1. 私のアプローチは実現可能ですか?つまり、この方法でも実行できますか?
  2. それは正しい/最も効率的なソリューションですか?
  3. それが適切な解決策ではない場合、より良いアプローチは何でしょうか?

問題:

  1. アプリケーションを介して大量の電子メールを送信する必要があります。
  2. 共有ホスト サーバーでは、スパマーとして分類される前に、1 時間あたり最大 500 通の電子メールしか送信できません。
  3. バッチメール送信中のサーバータイムアウト

提案された解決策:

タスクが送信されると (つまり、ユーザーがフォームとフロントエンド テンプレートを使用して必要なすべての電子メール情報を提供し、ターゲット オーディエンスを選択するなど)、アクションは次のようになります。

  1. 電子メールが送信される (保存された連絡先のデータベースからの) レコードの数を決定します
  2. 上記 #1 のレコード数が 400 を超える場合:
  3. DB 内のこれらすべてのレコードにバッチ番号を割り当てます。
  4. 次の CRON ジョブを実行します。
  5. 1 時間ごとに、バッチ「X」で 400 レコードを選択し、バッチ「X」のレコードがなくなるまで、保存された電子メール テンプレートを送信します。400 のバッチが送信されるたびに、そのバッチ番号が消去されます (したがって、次の時間に再び選択されることはありません)。
  6. その前にスケジュールされている (つまり、現在実行中の) 未完了の 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」のレコードのリストです。

これが最も効率的なソリューションであるかどうかはわかりません。サーバーが停止しているように見え、リストや電子メールが長い場合は最終的にタイムアウトになるからです。

ですから、現時点で意見を求めているだけです...よろしくお願いします。

4

0 に答える 0