Я использую phpmailer для рассылки некоторых подписчиков. Каждый подписчик является частью «Категории». Перед отправкой я сначала выбираю категорию, к которой относятся подписчики. У каждого пользователя есть уникальный идентификатор, который называется $recipients_id. Что происходит: в приведенном ниже коде каждый пользователь получает все «ссылки для отмены подписки»; так же и других членов. И он / она должен получать отписку только со своим идентификатором:

// part of the script
$mail->IsHTML(true);                            //Sets message type to HTML             
$mail->Subject = "Newsletter";                  //Sets the Subject of the message
$mail->Body = $_POST["message"];
foreach($category_matches as $file) { // grab subscribers of the category
    // get data out of txt file     
    $lines = file($file, FILE_IGNORE_NEW_LINES); // set lines from matched file into an array
    $recipients_id = $lines[0]; //  id of recipients
    $recipients_name = $lines[2]; //  name of recipients
    $recipients_email = $lines[3]; //  email of the recipients                                  
    $mail->AddBCC($recipients_email, $recipients_name); //bcc to all subscribers of the category
    $mail->Body .= '<a href="http://example.com/newsletter/unsubscribe.php?id='.$recipients_id.'">Unsubscribe</a>'; //unsubscribe anchor    

    echo $recipients_id.'<br />'; // this echos me the id's of the subscribers in the category to check only 


}

if($mail->Send())           //Send an Email. Return true on success or false on error
{
    $result = '<div class="alert alert-success">Newsletter sent to subscribers of:<b> '.$recipients_category.'</b></div>';
}
else
{
    $result = 'div class="alert alert-danger">There is an Error</div>';
}
1
john 20 Дек 2019 в 18:38

1 ответ

Согласно комментариям выше, ваш код должен выглядеть примерно так:

// part of the script
$mail->IsHTML(true);                            //Sets message type to HTML             
$mail->Subject = "Newsletter";                  //Sets the Subject of the message
foreach($category_matches as $file) { // grab subscribers of the category
    // get data out of txt file     
    $lines = file($file, FILE_IGNORE_NEW_LINES); // set lines from matched file into an array
    $recipients_id = $lines[0]; //  name of recipients
    $recipients_name = $lines[2]; //  name of recipients
    $recipients_email = $lines[3]; //  email of the recipients                              
    $mail->AddAddress($recipients_email, $recipients_name);     //Adds a "To" address

    try {
        $mail->Body = $_POST["message"].'<br /><br />'.'<a href="http://example.com/newsletter/unsubscribe.php?id='.$recipients_id.'">Unsubscribe</a>'; //unsubscribe anchor
        $mail->Send();  
        $result = '<div class="alert alert-success">Newsletter sent to subscribers of:<b> '.$recipients_category.'</b></div>';                  

    } catch (Exception $e) {
        $result = '<div class="alert alert-success">Mailer Error (' . htmlspecialchars($recipients_email) . ') ' . $mail->ErrorInfo . '</div>';
        $mail->smtp->reset(); // reset SMTP connection
    }

    $mail->clearAddresses(); // Clear all addresses for the next iteration

}

ПРИМЕЧАНИЕ: есть только 1 $mail->Body, который включает в себя сообщение и ссылку unique_id для отмены подписки. Привязать эхо к var $result и echo $result вне цикла; в противном случае вы получите их несколько раз, для каждого получателя, которого вы отправляете

3
john 20 Дек 2019 в 20:24