循环phpmailer

时间:2010-09-16 15:04:28

标签: php

当我发送电子邮件时,我会收到两封电子邮件,但它应该向各自的电子邮件发送电子邮件。 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++;
}

3 个答案:

答案 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()。