PHPで最小1000以上のメールを送信する最も適切な方法は何ですか? それを処理できる信頼できる電子メールキューイング手法はありますか?
7 に答える
メールをメール キュー データベース テーブルに挿入するだけで、別のプロセスでキューをチェックし、特定の数を一度にバッチ送信できます。
そのためのテスト済みのソリューションがあります:PEAR Mail_Queue
私にとってはうまくいきます。
Mercutioが提案したように、送信を待機している電子メールごとに新しいレコードをメールキューテーブルに挿入し、別のプロセス(CRONなど)を使用して、キューに入れられたアイテムがないか定期的にテーブルをチェックします。
メールがキューに入れられている場合(そしてメールが受信者ごとにカスタマイズされていない場合)、ドメインごとにメールをグループ化し、ブロックを一緒に送信して、送信する必要のあるメールの総数を減らします。 Gmailアカウントに対しては、10の25ブロックで250を送信します(Bccの受信者は、お互いが見えないようにすることを忘れないでください)。
実際にメールを送信するには、phpのmail()関数を介してPEARメールを使用します
電子メールを送信した後、キューからレコードを削除するか、ステータスフラグを変更して、送信されたことを示してループします-送信に失敗した電子メールを追跡するためのカウンターを追加し、x回の試行に失敗した後にそれらを削除します
タイムアウトの問題を克服するには、(状況に応じて)-set_time_limit()をx秒に設定し、スクリプトの実行時間を追跡します((x-1)秒後にスクリプトを強制終了します)-コマンドからスクリプトを呼び出しますタイムアウトを回避するための行-1回の実行でスクリプトが送信できる電子メールの数に制限を設定します
確かに、データベーステーブルはアイデアかもしれません。しかし、2MBの添付ファイル付きの1000通の電子メールを送信するのはどうでしょうか。それも考慮に入れる必要があります。私は自分で問題を抱えていましたが、最終的には電子メールをデータベースに書き込み、ファイルをファイルシステムに書き込むことにしました。次に、使用した電子メールスクリプトがデータベースレコードを読み取り、添付ファイルをフェッチして送信しようとしました。
このメールのキューイングを自分で行う必要がありますか?
すべてのメールをローカル マシンのメール転送エージェント (sendmail...) に配信するだけで、キューイングと送信を処理できます。結局のところ、それが設計されたものです。
つまり、心配する必要はありません。
私は一般的にハックに頼ってきました。私は電子メール アドレスのデータベース リストを持っており、メタ リダイレクトを自分自身に使用し、現在のデータベース内の行を指定する「オフセット」パラメータを増やしています。サーバー リダイレクトは問題を引き起こします。これは、ブラウザーが、所要時間が無限ループを示していると想定するためです。