2010-09-16 2 views
8

Когда я отправляю электронное письмо, я получаю два сообщения электронной почты, но он должен отправлять электронную почту на соответствующие письма. Проблема Lopoping?looping phpmailer

$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++; 
} 
+8

Сначала выполните базовую отладку. Вы имеете в виду 'mail_vars [4]', который вообще не существует –

+0

Что такое '$ f ++;' about? – RobertPitt

+0

Я сожалею, что это $ mail_vars [2] –

ответ

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++; 
} 
+0

$ body должен быть сброшен сверху в петле –

+0

Да, верно - ясно, что у вас это достаточно, чтобы понять, что вы;) Вы действительно не " t нужно '' body' var вообще {отредактировано} – Rudu

+0

Если вы отправляете пароль (или какой-либо персонализированный контент), вы должны называть '$ mail-> AltBody = '';' перед '$ mail-> MsgHTML() ', или текстовая версия вашего письма будет содержать содержимое первого получателя. – Hobo

33

Глядя через источник PHP Mailer, вам нужно очистить поля. По крайней мере, адрес, может быть, больше. Вот раздел кода из класса PHPMailer, который имеет четкие функции. Вы более чем приветствуетесь, чтобы просмотреть их и попробовать их и т. Д. Это, очевидно, является альтернативой повторной инстанцированию нового объекта, который может или не может вызвать утечку памяти (в зависимости от того, сколько звонков вам нужно сделать).

Так реализация коды 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() { 
    } 
+0

Хорошая работа, Брэд. Это лучший способ очистить адрес, а не воссоздать объект. Это должен быть принятый ответ ... но только один парень поддержал. – VKGS

2

если вы смотрите через код PHP мэйлера, есть этот полезный ClearAllRecipients метод(), если вы хотите, чтобы очистить до, куб.см и ОЦК все сразу.