質問

PHP で最小 1000 以上の電子メールを送信する最も適切な方法は何ですか?これを処理できる信頼できる電子メール キュー技術はあるでしょうか?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

役に立ちましたか?

解決

電子メールをメール キュー データベース テーブルに挿入し、別のプロセスでキューをチェックし、特定の数を一度にバッチ送信することができます。

他のヒント

そのためのテスト済みのソリューションがあります。梨 メールキュー

私にとってはうまくいきます。

mercutioが示唆したように、送信を待っている各電子メールのメールキューテーブルに新しいレコードを挿入し、別のプロセス(CRONなど)を使用してキューに登録されているアイテムがないかテーブルを定期的にチェックします。

メールがキューに入れられている場合(メールが受信者ごとにカスタマイズされていない場合)、メールをドメインごとにグループ化し、ブロックをまとめて送信して、送信する必要があるメールの総数を減らします。1000 件のメールがキューに入っていて、250 件が Gmail アカウント宛ての場合、250 件を 10 個ずつ 25 ブロックに分けて送信します (受信者がお互いに見えないように、Bcc 受信者に忘れずに送信します)。

実際に使用するメールを送信するには PEARメール phpのmail()関数を介して

電子メールを送信した後、キューからレコードを削除するか、送信されたことを示すステータスフラグを変更してループします。また、送信に失敗した電子メールを追跡し、x 回失敗した後に削除するカウンターも追加します。

タイムアウトの問題を克服するために、私なら(状況にもよるが)次のようにする。 - set_time_limit()をx秒に設定し、スクリプトの実行時間を記録する((x-1)秒後にスクリプトを終了させる)。 - タイムアウトを避けるためにコマンドラインからスクリプトを呼び出す。 - スクリプトが1回の実行で送信できるメール数の上限を設定する。

確かに、データベース テーブルはアイデアかもしれません。しかし、2MB の添付ファイルが付いた電子メールを 1,000 通送信する場合はどうなるでしょうか?それも考慮する必要があるでしょう。私自身もこの問題を抱えていたため、最終的には電子メールをデータベースに書き込み、ファイルをファイルシステムに書き込むことにしました。次に、私が使用した電子メール スクリプトはデータベース レコードを読み取り、送信する添付ファイルを取得しようとしました。

このメールのキューイングを自分で行う必要がありますか?

すべてのメールをローカル マシンのメール転送エージェント (sendmail...) に配信し、キューイングと送信を任せるだけです。結局のところ、それがそのために設計されたものです。

言い換えると:ご心配なく!

私は通常、ハッキングに頼っていました。電子メール アドレスのデータベース リストがあり、データベース内のどの行に到達しているかを指定する「オフセット」パラメータを増加させて自分自身へのメタ リダイレクトを使用します。サーバーのリダイレクトは、ブラウザーが所要時間が無限ループを示していると想定するため、問題を引き起こします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top