当我发送电子邮件时,我会收到两封电子邮件,但它应该向各自的电子邮件发送电子邮件。 Lopoping问题?
$array_values = Array
(
[0] => Array
(
[0] => uname1
[1] => fullname1
[2] => email 1
)
[1] => Array
(
[0] => uname2
[1] => fullname2
[2] => email 2
)
)
$f=0;
foreach($array_values as $mail_vars)
{
//$mail->AddReplyTo($mail_vars[2],'RED');
$mail->AddAddress($mail_vars[2], 'sss');
$body .="<br>";
$body .= 'Username: '. $mail_vars[0];
$body .="<br>";
$body .= 'Password: '.$mail_vars[1];
$body .="<br>";
$mail->SetFrom('email', 'FULLNAME');
$mail->Subject = "NEW";
$mail->MsgHTML($body);
//$mail->Send();
$f++;
}
答案 0 :(得分:36)
浏览PHP Mailer的源代码,您需要清除字段。至少地址,可能更多。以下是PHPMailer类中具有clear函数的代码部分。非常欢迎您浏览它们并尝试它们等。这显然是重新实例化一个新对象的替代方法,这可能会也可能不会导致内存泄漏(取决于您对它进行了多少次调用)。
所以实现clearAddresses代码:
$mail->Subject = "NEW";
$mail->MsgHTML($body);
$mail->Send();
$mail->ClearAddresses(); // should reset the To address and remove the first one from it.
我删除了实际代码,因为您只需要描述和功能名称。
/////////////////////////////////////////////////
// CLASS METHODS, MESSAGE RESET
/////////////////////////////////////////////////
/**
* Clears all recipients assigned in the TO array. Returns void.
* @return void
*/
public function ClearAddresses() {
}
/**
* Clears all recipients assigned in the CC array. Returns void.
* @return void
*/
public function ClearCCs() {
}
/**
* Clears all recipients assigned in the BCC array. Returns void.
* @return void
*/
public function ClearBCCs() {
}
/**
* Clears all recipients assigned in the ReplyTo array. Returns void.
* @return void
*/
public function ClearReplyTos() {
}
/**
* Clears all recipients assigned in the TO, CC and BCC
* array. Returns void.
* @return void
*/
public function ClearAllRecipients() {
}
/**
* Clears all previously set filesystem, string, and binary
* attachments. Returns void.
* @return void
*/
public function ClearAttachments() {
}
/**
* Clears all custom headers. Returns void.
* @return void
*/
public function ClearCustomHeaders() {
}
答案 1 :(得分:4)
你需要一个:
$mail=new PHPMailer()
在你的for
循环的开头 - 就是这样,第二次通过它只是弄乱了第一封电子邮件(因为没有创建新的电子邮件)。
正如你所指出的那样,身体也需要重置 - 实际上使用一个不太有用的单独的var - 更好的是直接提供给MsgHTML
。由于您的电子邮件内容微不足道,您可能还希望发送纯文本版本的数据(取决于我猜的目标收件人)。
所以更新的脚本:
foreach($array_values as $mail_vars)
{
$mail=new PHPMailer();
$mail->SetFrom('email', 'FULLNAME');
$mail->AddAddress($mail_vars[2], 'sss');
$mail->Subject = "NEW";
$mail->MsgHTML("<br>\nUsername: ".$mail_vars[0]."<br>\nPassword: ".$mail_vars[1]."<br>");
//$mail->Send();
$f++;
}
答案 2 :(得分:4)
如果你查看php邮件代码,如果你想一次清除,cc和bcc,就有这个有用的方法ClearAllRecipients()。