7

私はphpとmysqlを使用しています。

サブスクライバーを更新するために10k++(1万以上)の電子メールを送信します。これは、これらを送信するのは初めてです。私はphpメール関数を使用します、基本的にこれが私がすることです:

まず、データベースからデータを取得します。

Select name, email FROM data

その後、whileループを使用してデータを送信します。

while($r = mysql_fetch_assoc($exe)){
    ...
    if($mail){
        echo "success<br>";
    } else {
        echo "failed<br>";
    }
}
echo "Sent all";

各電子メールが正常に送信されるように、if..elseステートメントを含めます。世話をする必要があるものはありますか?10K ++ユーザーに送信するときに問題が発生しますか?

送信するメールの数に制限はありますか?

4

5 に答える 5

10

メールドキュメントからのこのメモに注意してください:

注: mail()関数は、ループ内の大量の電子メールには適していないことに注意してください。この関数は、各電子メールのSMTPソケットを開閉しますが、これはあまり効率的ではありません。
大量の電子メールの送信については、»PEAR::Mailおよび»PEAR::Mail_Queueパッケージを参照してください。

于 2009-10-09T11:09:56.753 に答える
6

メール数に制限はありませんが、PHPスクリプトには時間制限があります。php.iniに設定されているmax_execution_timeを参照してください。通常は20秒または30秒です。それがわからない場合は、phpinfo()を使用して調べてください。

さらに、ユーザーが大量の電子メールを受信しないように、いくつかの手順を実行する必要があります。誤ってスクリプトを2回開始した場合に二重の投稿を受け取らないように、送信済みとしてマークする必要があります。

それ以外は、phpのメール機能は本質的にまったく最適化されていないことに注意してください。phpmimemessageやその他のライブラリなど、いくつかのライブラリを試すことができます。これにより、たとえば、他の多くの機能の中でも、いくつかのキャッシュを実行できます。

于 2009-10-09T11:06:36.137 に答える
2

送信/失敗したメールのキューを作成して、失敗した試行を再送信し、何か問題が発生した場合にメールの再送信を回避できるようにする必要があります。

mail() 経由で 1 万通のメールを送信しようとするループを作成しないでください。

また、ヒットする可能性が最も高い制限は、ISP またはホストのメール サーバーの制限です。

于 2009-10-09T11:22:21.453 に答える
0

pear::Mail_Queue http://pear.php.net/package/Mail_Queue/を使用できます

それは本当に良い仕事をします。

于 2009-10-09T11:16:19.637 に答える
0

また、 mailmanなどの「実際の」メーリング リスト ツールの設定、または少なくともエイリアス グループの使用 (可能であれば) を検討することもできます。

また、serverfault に関する関連する質問を参照しください。そしてここ - https://serverfault.com/questions/68357/whats-the-best-way-to-send-bulk-email

于 2009-10-09T11:45:04.123 に答える