2

10 人の異なるユーザーにメールを実行しようとしています。変数 $friendsEmails を 10 の異なるメールを含む配列に作成しましたが、10x10 のメールごとに 10 が複製されるようです。私は何か間違ったことをしていますか?

  for($i =0; $i<11; $i++){

    $mail->SetFrom($email, $name);

    $mail->AddReplyTo($email,$name);

    $mail->Subject    = "We wish you a merry Christmas";

    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

    $mail->MsgHTML($body);

    $mail->AddAddress($friendsEmails[$i], $friendsNames[$i]);

    if(!$mail->Send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
      echo "Message sent!";
    }

       }
4

3 に答える 3

2

for ループの繰り返しごとに新しいアドレスを追加しているだけなので、複数の電子メールを送信しているのも不思議ではありません。PHPMailer::clearAllRecipients()新しい電子メール アドレスを追加する前に、前の繰り返しからデータを削除するために使用します。

for($i =0; $i<11; $i++){
    $mail->SetFrom($email, $name);
    $mail->AddReplyTo($email,$name);
    $mail->Subject    = "We wish you a merry Christmas";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
    $mail->MsgHTML($body);
    $mail->AddAddress($friendsEmails[$i], $friendsNames[$i]);

    if(!$mail->Send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
      echo "Message sent!";
    }
    $mail->clearAllRecipients(); // Clear all recipient types(to, bcc, cc).
}
于 2012-12-21T08:54:25.000 に答える
1

電子メール アドレスを配列内のキーと値のペアに配置する方が簡単です。したがって、キーは友達の名前で、値は電子メール アドレスです。また、foreach ループを使用して、配列内の項目数を特定することなく、配列全体を反復処理します。

ああ、ループごとにメールオブジェクトを再インスタンス化して、最後の電子メールも送信しないようにします(確かなことはわかりませんが、それが起こっている可能性があります)

次のようなことを試してください:

$friendsEmails = array('name' => 'email_address');

foreach($friendsEmails as $name => $email) {

    $mail = new Mailer();

    $mail->SetFrom($name);

    $mail->AddReplyTo($name);

    $mail->Subject = "We wish you a merry Christmas";

    $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

    $mail->MsgHTML($body);

    $mail->AddAddress($email, $name);

    if(!$mail->Send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
      echo "Message sent!";
    }
}
于 2012-12-21T08:32:13.293 に答える
0

おそらく、すべての反復の最後に、オブジェクトをきれいにする必要がありmailます。

もう 1 つのオプションは、ループの開始時に 1 つの異なるメール クラスをインスタンス化することです。

于 2012-12-21T06:39:18.723 に答える