我正在使用phpmailer向我的订阅者发送批量电子邮件,但我遇到了一个可怕的问题,即当我向订阅者发送电子邮件时,每个订阅者都会多次收到相同的电子邮件。有些人得到4次,有些人得到14次。 我正在通过Mysql表获取其中flag = 0的订阅者电子邮件,并且在while循环结束时我将订阅者标志更新为1.我知道它的循环问题但我不知道我在哪里做错了甚至不确定我应该使用while循环或其他东西来解决这个问题。任何帮助都会非常感谢我。 这是我的代码:
props
答案 0 :(得分:0)
我看到的问题是,在循环中用更新输出替换结果变量。请在循环中使用不同的变量名称
$upd_query = "update subscribers set flag_email = 1 where customer_id = ".$id."";
$updateResult= mysqli_query($link, $upd_query);
邮件对象创建可以在while循环中移动
$query = "select customer_id, customer_name, customer_email from subscribers where flag_email = 0";
$result = mysqli_query($link, $query) or die("No customer in the table");;
while($values = mysqli_fetch_assoc($result)){
$mail = new PHPMailer(true);
....
}
答案 1 :(得分:0)
这种情况正在发生,因为您不是每次都在循环中清除to
地址 - 请注意该方法称为addAddress
,而不是setAddress
,并且它会执行此操作提示。您需要在循环结束时调用$mail->clearAddresses();
来重置它。你在其他方面做得很好,但是你可以采取一些措施来提高效率,主要是使用keep alive并在循环之前设置所有消息的所有属性。
您可以在the mailing list example provided with PHPMailer中看到所有这些内容。