2

mail()すべてのサブスクライバーを反復処理しながらループで使用する PHP メーリング リスト コードを改善しています。「最大実行時間の 30 秒を超えました」というエラーを表示するために使用されたスクリプトを追加して解決しましたset_time_limit(0);

現在はエラーは発生していませんが、100 件のメッセージを送信するのに約 7 分かかりました。私のオプションは何ですか?

BCC ですべてのサブスクライバーにメッセージを 1 つだけ送信することは役に立ちますか?それとも同じ「舞台裏」ですか?

4

5 に答える 5

1

BCCで指定してすべてのサブスクライバーに送信すると、作業が速くなります。一部のプライベート環境には適しているかもしれませんが、多くの人がそのような電子メールをスパムと見なす可能性があるため、公開Webページ/システムでこれを行うことはお勧めしません。

1つのオプションは、cronジョブを介して電子メールを送信することです。その場合、すべての電子メールが最終的に送信される限り、電子メールの送信にどれだけの時間がかかるかは実際には問題ではありません。

于 2011-02-24T13:19:25.967 に答える
1

BCCとしてすべての人に送信する方がはるかに高速になります。コードはより高速にmail()実行され、1回だけ実行されます。

これは簡単な修正ですが、前述のように、大きなBCCリストはスパムフォルダへの安全な道です。ただし、使用mail()することもスパムの確実な宛先です。

実際に改善したい場合は、SourceForgeのPHPMailerを使用し、Xメールのバッチでcronを使用してSMTP経由で送信します(スパムヒットが少ない)。

PHPドキュメントの状態:

注:この関数は、ループ内の大量の電子メールには適していない
ことに注意してください。mail()この関数は、各電子メールのSMTPソケットを開閉しますが、これはあまり効率的ではありません。

大量の電子メールを送信するには、、» PEAR::Mailおよび» PEAR::Mail_Queueパッケージを参照してください。

于 2011-02-24T13:21:14.293 に答える
0

CronJobの方が適しています。私はこれを使用しましたが、機能します...コード化したプロファイルは、問題を理解するのに役立ちます。

于 2011-02-24T13:26:12.813 に答える
0

BCC 経由でメールを送信することをお勧めします。BCC の方がはるかに高速です。スクリプトは、SMTP サーバーへの接続を 1 つ確立するだけでよく、このサーバーが残りの作業を行います。

たとえば、PHPMailer や PEAR::Mail も見てみましょう。大量のメールに対する mail() メソッドの悪い点は、メールが送信されるたびに SMTP サーバーへの新しいソケットを開くことです。優れたメール ライブラリは、SMTP サーバーへのソケット接続を一度作成し、すべての電子メールを送信して最後に閉じます。

もう少し高速化するには、SMTP サーバーの構成を調べて (可能であれば)、デーモンなどを増やすこともできます。また、一部の SMTP サーバーには送信できる最大数があることも考慮する必要があります。

于 2011-02-24T13:58:31.607 に答える
0

単にオプションを求めているだけなので、いくつかを以下に示します。

  • コードのプロファイリングを行い、遅い理由を確認してください。いくつかの効率の問題を解決できるかもしれません。
  • mail()特に、swiftmail や Zend_mail などのより優れた代替手段が存在するため、関数に依存することは通常お勧めできません。これらは小規模な郵送要件には過剰かもしれませんが
  • おそらく、サーバー関連の問題でしょうか?おそらく、サーバー管理者に相談してください。
于 2011-02-24T13:15:09.037 に答える