PHPMailer clearAllRecipients()在Wordpress中不起作用

时间:2018-12-19 00:07:38

标签: wordpress phpmailer

我正在为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']  ) );
    }
}

2 个答案:

答案 0 :(得分:0)

如果您收到包含该代码的多封电子邮件,则意味着您的脚本作为一个整体正在运行多次,而不是一次运行的脚本会发送重复的邮件。您可以通过在主题行后面附加一个随机数来验证这一点。这通常是由浏览器插件导致的,它们不必要地重新提交了请求,但这可能是因为您的代码被Wordpress出于其他原因而调用-添加一些日志记录会表明这一点。

答案 1 :(得分:0)

好的,典型的PEBCAK错误。抱歉!我无意间包装了if / else语句,以查看在相同的foreach循环中使用哪种邮件方法。因此,我从列表中运行foreach,然后检查要使用的邮件方法,然后在其中运行相同的foreach。我很蠢。问题解决了。