我正在为WordPress创建一个插件,该插件使用WordPress的内置PHPMailer类发送定期通讯。我一切正常,但是我希望每小时将单个电子邮件发送给指定数量的收件人。
我正在从数据库中提取大量电子邮件地址,并通过foreach
循环运行它们以发送单独的电子邮件,并且我将通过addAddress()函数附加每个电子邮件地址。
为确保每个地址仅发送一封电子邮件,我试图在循环开始时使用clearAllRecipients()
,但这不起作用。如果我将“每小时电子邮件地址”设置为3,则每个3个电子邮件地址都会收到3封单独的电子邮件。
我也尝试通过foreach
循环运行列表,仅对每个列表运行addAddress
并使用一个send
语句,但是我仍然分别收到3封电子邮件,每封3封地址。
下面是我的foreach
循环。我不知道怎么做错了。请帮忙。
foreach ( $list as $e ) {
$phpmailer->clearAllRecipients();
$phpmailer->addAddress($e['email']);
if ( $phpmailer->Send() ) {
// Update the member row in the db. update the "checked" column to 1 so it will be skipped next pass through
$wpdb->query( $wpdb->prepare( "UPDATE {$q_vars['members']} SET checked = %d WHERE id = %d", 1, $e['id'] ) );
}
}
答案 0 :(得分:0)
如果您收到包含该代码的多封电子邮件,则意味着您的脚本作为一个整体正在运行多次,而不是一次运行的脚本会发送重复的邮件。您可以通过在主题行后面附加一个随机数来验证这一点。这通常是由浏览器插件导致的,它们不必要地重新提交了请求,但这可能是因为您的代码被Wordpress出于其他原因而调用-添加一些日志记录会表明这一点。
答案 1 :(得分:0)
好的,典型的PEBCAK错误。抱歉!我无意间包装了if / else语句,以查看在相同的foreach
循环中使用哪种邮件方法。因此,我从列表中运行foreach
,然后检查要使用的邮件方法,然后在其中运行相同的foreach
。我很蠢。问题解决了。