2015-08-10 6 views
1

Я создал код, в котором письма отправляются разным людям с разными телами, но только в случае выполнения некоторых условий. Мой код выглядит следующим образом:Дублирующиеся письма, отправленные от PhpMailer

set_time_limit(300); 
require_once("class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->SMTPAuth = true; 
$mail->Host = "*********"; 
$mail->SetFrom('*********'); 
$mail->Subject = "System Change"; 
$add = array("a", "b"); 
foreach ($add as $address) { 
    $mail->clearAttachments(); 
    $mail->clearAllRecipients(); 

    if ($Credit == 'N' && $CMU == 'N') { 
     if ($Ops_Approval == 'Approved' && $Risk_Approval == 'Approved' && $Finance_Approval == 'Approved') { 
      if ($SeniorManagement == 'Y') { 
       if ($address == "a") { 
        $mail->AddAddress('********'); 
        $mail->MsgHTML("Mail1"); 
        $mail->send(); 
        if ($mail->Send()) { 
         echo "Mail 1"; 
        } else echo "ERROR IN SENDING MAILS"; 
        exit; 
       } 
       if ($address == "b") { 
        $mail->AddAddress('****'); 
        $mail->MsgHTML("Mail2"); 
        $mail->send(); 
        if ($mail->Send()) { 
         echo "Mail 2"; 
        } else echo "ERROR IN SENDING MAILS"; 
        exit; 
       } 
      } 
     } 
    } 
} 

Что работает - Mails посылаются. Что не работает - Обе письма имеют одинаковое тело i.e Mail1. Я пробовал создавать разные циклы, но получаю тот же результат. Цените любые предложения :)

+0

удалить exit; и попробуйте –

+0

Вы используете старую версию PHPMailer. [Получить последнюю версию] (https://github.com/PHPMailer/PHPMailer). – Synchro

+0

Если я удаляю выход, он выдает ошибку. :( – SR1092

ответ

2

Мы не думаем, что отправлено 2 письма, потому что вы написали выход на if, а не на другом. Попробуйте это: -

if ($address == "a") { 
    $mail->AddAddress('********'); 
    $mail->MsgHTML("Mail1"); 
    //$mail->send(); 
    if($mail->Send()) { 
     echo "Mail 1"; 
    } else { 
     echo "ERROR IN SENDING MAILS"; 
     exit; 
    } 
} 
if ($address == "b") { 
    $mail->AddAddress('****'); 
    $mail->MsgHTML("Mail2"); 
    //$mail->send(); 
    if($mail->Send()) { 
     echo "Mail 2"; 
    } else { 
     echo "ERROR IN SENDING MAILS"; 
     exit; 
    } 
} 
+0

Эй, попробовал это, но все же отправил 2 письма с тем же телом. – SR1092

+0

можете ли вы прокомментировать свой запрос $ mail-> send() before до этого. – WisdmLabs

+0

Он работает! Спасибо! :) – SR1092

1

Вы звоните Send() дважды, используя его снова в вашем случае. Вы можете удалить линию выше if($mail->send()){. Также не забудьте поставить код после else внутри скобок, иначе он не будет выполнять выход.

+1

Вам не нужно для создания нескольких экземпляров. Вы можете повторно использовать один и тот же, и просто измените свойства, которые отличаются друг от друга, и, вероятно, вызывают 'clearAddresses' между ними. Это показано в примере списка рассылки, предоставленном PHPMailer. – Synchro

Смежные вопросы