在phpmailer中循环

时间:2012-12-21 06:36:16

标签: php phpmailer

我正在尝试向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!";
    }

       }

3 个答案:

答案 0 :(得分: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!";
    }
}

答案 1 :(得分:1)

难怪你发送多封电子邮件,因为在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).
}

答案 2 :(得分:0)

也许在每次迭代结束时,您应该清理mail对象。

另一种选择是在循环开始时实例化一个不同的邮件类。