PHPMailer在发送电子邮件时显示列表中的所有收件人


PHPMailer shows all recipients in the list when sending an email?

我使用PHPMailer发送电子邮件。我在foreach循环中使用了它,以便向收件人列表发送电子邮件。

它正在工作,因为电子邮件正在发送,但每个收件人都会收到整个收件人列表!

foreach ($id as $item) {
        $mail->addAddress($item);
        $mail->Subject = $correo['mailAsunto'];
        $mail->Body    = $correo['mailMensaje'];
        if(!$mail->send()) {
            echo 'Error: ' . $mail->ErrorInfo;
        } else { 
          echo 'Mail sent to '.$item.'<br>';
        }
}

我试过:$mail->AddBCC($item);而不是addAddress,但电子邮件仍然可以在"TO"标题中看到。

我该怎么办?这可能会造成严重的隐私问题。

更新

以防有人有类似的问题,在收到响应后,代码现在是这样的:

foreach ($id as $item) {
        $mail->addAddress($item);
        $mail->Subject = $correo['mailAsunto'];
        $mail->Body    = $correo['mailMensaje'];
        if(!$mail->send()) {
            echo 'Error: ' . $mail->ErrorInfo;
        } else { 
          echo 'Mail sent to '.$item.'<br>';
                    $mail->ClearAddresses(); 
                    $mail->ClearAllRecipients();
        }
}

您正在向同一个对象添加地址,因此它们正在累积。尝试在发送消息后删除每个地址:

foreach ($id as $item) {
        $mail->addAddress($item);
        $mail->Subject = $correo['mailAsunto'];
        $mail->Body    = $correo['mailMensaje'];
        if(!$mail->send()) {
            echo 'Error: ' . $mail->ErrorInfo;
        } else { 
          echo 'Mail sent to '.$item.'<br>';
        }
        $mail->ClearAllRecipients();    ◄■■■■■■■■■■■■■■■■■■■■■■■■■
}

假设这是正确的PHPMailer github repo,请查看https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php#L358。您需要将该标志设置为true。然后,等到循环结束后再执行send函数。