2

phpmailer/swiftmail 対応のメーリング スクリプトを書きました。実際、小規模なキャンペーンは問題なく機能し、すべてのメールはスパムやサーバー リソースの問題なしに受信者に届きます。

接続ごとの送信パフォーマンスについて質問があります。アクションを送信するには、どちらの方法が適していますか? (加入者固有の異なるメール本文)

最初のシナリオ;

  • ニュースレター データを開く
  • タスク リストで 100 人の購読者を捕まえる
  • 各サブスクライバーのニュースレター データ/ヘッダーを置き換えて新しい配列に保存する
  • PhpMailer を呼び出す - 一般的な SMTP 接続設定
$mail->SMTPKeepAlive = true;
foreach($newArray as $k=>$v){
  $mail->AddAddress($k, $v['name']);
  $mail->Subject  =  $v['subject'];
  $mail->Body = $v['content'];
  $mail->Send();
}
  $mail->smtpClose();

2 番目のシナリオ (スクリプトの現在のメソッド、phpmailer クラスをレコード ループに呼び出しました);

  • ニュースレター データを開く
  • タスク リスト 100 レコードを開く
while($rs = $sql->fetch_assoc()){
  Replace Newsletter Data/Header
  Call PhpMailer - Common SMTP Connection settings
  $mail->SMTPKeepAlive = true;
  $mail->AddAddress($rs['mail'], $rs['name']);
  $mail->Subject  =  $campRs['subject'];
  $mail->Body = $campRs['content'];
  $mail->Send();
}
  $mail->smtpClose();

私はそれについて混乱しています.大量のメーリングリストに行くと、サーバーまたはスクリプトの問題が発生する可能性がありますか?

よろしくお願いします!

4

2 に答える 2

2

PHPMailer から送信する最速の方法は、SMTP 経由ですべてのメッセージを近くの (またはローカルホスト上の) メール サーバーに送信することです。mail は sendmail ユーティリティを呼び出し、少なくとも postfix の場合はmail()localhost への SMTP 接続を開くだけなので、これは (驚くべきことに) 多くの場合、 を呼び出すよりも高速です。

生成スクリプトは MTA ではないため、受信者アドレスに直接送信しないでください。そのため、キューイング、遅延、エラー処理、後続のバウンス処理などが不足します。そのためには、適切なメールサーバー (postfix など) を使用してください。

ループのたびに新しい PHPMailer インスタンスを作成しないでください。リソースの無駄です。アムダールの法則はもちろん適用されますが、SMTP のオーバーヘッドほど大きくないからといって、それを捨てる価値があるわけではありません。ループ外のすべての受信者に共通するすべてのもの (件名など) を設定します。PHP の実際のスレッドは単純ではありませんが、複数のプロセス (CPU コアの数よりも多い。pcntl 拡張機能を参照) は簡単にフォークできます。ワーカー プロセスができるだけ速く送信できるように、beanstalkd などでメッセージを事前にキューに入れておくと便利な場合があります。

最初の例では、各メッセージ間の受信者配列をクリアしていないため、最初のメッセージは最初の受信者に送信され、2 番目のメッセージは 2 番目 と最初の受信者に送信されます。$mail->clearAllAddresses()ループの最後に呼び出す必要があります。

特に近くのリレーを使用している場合は、SMTP オーバーヘッドを大幅に削減するため、SMTPKeepAlive を使用する必要があります。

より完全な例については、 PHPMailer に含まれている例を参照してください

これらすべてを実行すると、1 秒あたり数百のメッセージに簡単に到達できます。

于 2015-01-23T21:54:49.660 に答える
0

電子メールの送信に費やされる時間の大部分は、Web サーバーと Web サーバーが通信している SMTP サーバーとの間の SMTP 通信です。

どちらのシナリオも同等に高速である可能性があります。

パフォーマンスを向上させる必要がある場合は、複数のスレッドが異なる電子メール アドレスに同時に送信することを検討してください。

于 2015-01-23T20:17:33.187 に答える