我正在尝试向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!";
}
}
答案 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
对象。
另一种选择是在循环开始时实例化一个不同的邮件类。