0

すでにメールの送信を開始している有効なメーラー スクリプトがあります。約 5,000 の電子メール アドレスに電子メール メッセージを送信する必要があります。しかし、いくつか問題があります。

1.) 送信が非常に遅い。私はそれが埋め込みだと思いますか?画像のサイズは 300+kb ですが、そのように送信が遅くなるのですか? メールは 1 分間に 3 通のメールを送信しています。また、メールを 5000 人の受信者に送信しようとすると、かなりの時間がかかります。コードは次のようなものです。

$mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png");
$mail->Body = 'Embedded Image: <img src="cid:my-attach"> 

2.) 1 日あたり 100 通のメールに制限されない smtp に登録しました。これは従量課金制のようなもので、送信されたメッセージを追跡します。ログを確認したところ、メッセージが重複していました。2 回送信された受信者もいましたが、奇妙なことに、メッセージを 2 回送信しようとしてから、次の電子メール アドレスに移動します。それに関する問題は、smtp サービスからの制限を消費し、メールにあまりにも多くのキューを追加して、送信をさらに長くすることです。私の送信コードは次のようなものです:

if(isset($fromaddress)){
do{
$mail->AddAddress($row['email']);
$mail->Send();
$mail->ClearAddresses();
}
while ($row = mysql_fetch_array ($result));
}

そして、私のクエリは次のようなものです:

SELECT * from email where id > 200

あなたは私の質問について疑問に思っているかもしれません. 接続の問題でタイムアウトして中断したところからメールを送信する必要があったため、id 列を作成し、メールが送信された最後のメールアドレスの id として番号を割り当てました。それが賢明だったかどうかはわかりませんが、それが現時点で私が持っていたものでした. 助言がありますか?

4

2 に答える 2

1
  1. PHPMailer の構築方法によっては、はい、非常に遅くなる可能性があります。理由は非常に単純です。添付ファイルとしてメールを送信する場合、メール呼び出しはメールの正確なバイト サイズを認識している必要があります。これは、イメージ全体の読み取りを含む準備によって行われます。これは 1 通の電子メールではかなり小さな遅延ですが、5000 回も実行する必要がある場合は... キューイングとワーカー アプローチを検討してください。

  2. データベースにフィールドを追加し、名前を付けmailSent、BIT と入力します。送信するたびに、適切な行に 1 を設定します。メールを選択するには、SELECT * FROM mails WHERE mailSent='0' LIMIT 100.

于 2012-11-28T11:34:17.467 に答える
0

それがあなたの質問のパート 2 に対する答えかどうかはわかりませんが、while ではなく do-while ループを使用する正当な理由はありますか?

$row['email']あなたのコードから私が見ることができるものから、最初の反復は$row が設定される前から電子メールアドレスを追加しようとしますか?

何かのようなもの:

while ($row = mysql_fetch_array($result)) {
    $mail->AddAddress($row['email']);
    //etc
}

あなたにとってよりうまくいくはずです。

これが回答ではなくコメントであるかどうかはわかりませんが、とにかくまだコメントできません。

于 2012-11-28T11:41:05.870 に答える