如何阻止 PHP Mailer 在每封电子邮件上附加所有电子邮件地址?

问题描述 投票:0回答:1

我一直在尝试许多不同的方法来防止 PHP Mailer 将来自我的数据库的每个电子邮件地址附加到每封电子邮件中。

我觉得每个用户从我的网站收到电子邮件并能够看到同一封电子邮件中附加的其他数千封电子邮件看起来不太合适。

这是我的代码,我已经尝试了很多不同的事情:

$query_select = "SELECT * FROM users";
$query = mysqli_query($connection, $query_select);

if($select_to == 'all'){
    while($row = mysqli_fetch_assoc($query)) {
        $user_email = $row['user_email']; 
        $send_to = $user_email;

        $mail->setFrom('[email protected]', 'My website');
        $mail->addAddress($send_to); 

        $mail->isHTML(true);
        $mail->Subject = $subject_email;
        $mail->Body    = $content_email;
        $mail->AltBody = $content_email;
    }
} else {
    if($select_to == 'single'){
        $send_to = $to_single_email;
    }
}




if($mail->send()){
    $confirm = 'Sent.';
    $send = array(
        'confirm'=>$confirm
    );
    echo json_encode($send);

} else {
    $confirm = 'There was en error while sending this email.';
    $send = array(
        'confirm'=>$confirm
    );
    echo json_encode($send);
}
php phpmailer
1个回答
3
投票

$mail->send()
将通过一条消息发送到所有地址。相反,您需要向每个收件人发送 一条消息。

while()
循环将被重构为类似于:

while($row = mysqli_fetch_assoc($query)) {
    $user_email = $row['user_email']; 
    $send_to = $user_email;

    $mail->setFrom('[email protected]', 'My website');
    $mail->addAddress($send_to); 

    $mail->isHTML(true);
    $mail->Subject = $subject_email;
    $mail->Body    = $content_email;
    $mail->AltBody = $content_email;
    $mail->send();
    $mail->clearAllRecipients();
}

clearAllRecipients()
的调用将清除以前通过
addAddress()

累积的地址

您还需要在每次调用

send()

的循环中添加错误检查
© www.soinside.com 2019 - 2024. All rights reserved.