Дубликаты писем, отправленных с PhpMailer

1

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

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

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

  • 0
    удалить выход; и попробовать
  • 0
    Вы используете старую версию PHPMailer. Получить последнюю .
Показать ещё 1 комментарий
Теги:
email
phpmailer

2 ответа

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 письма с тем же телом.
  • 0
    не могли бы вы прокомментировать ваш $ mail-> send (); до, если заявление.
Показать ещё 1 комментарий
1

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

  • 1
    Вам не нужно создавать несколько экземпляров. Вы можете повторно использовать один и тот же объект и просто изменять те свойства, которые отличаются, и, вероятно, вызывать clearAddresses между ними. Это показано в примере списка рассылки, предоставляемого PHPMailer.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню