【问题标题】:wp_mail breaking in loopwp_mail 中断循环
【发布时间】:2013-08-13 22:00:05
【问题描述】:

我需要每天向大约 200 位用户发送一封包含更新网站内容的电子邮件。我设置的方式是向每 20 位用户发送一封电子邮件(全部密件抄送),因此总共只发送了大约 10 封电子邮件。我正在使用 Wordpress wp_mail() 函数与 WP-Mail-SMTP 插件一起进行发送,以便使用预先配置的 gmail 帐户发送电子邮件。直到大约一周前,一切都运行良好。现在,在发送 5 封电子邮件后,脚本突然中断。

//SEND THE EMAIL TO 20 USERS AT A TIME
    foreach ($users as $user) {
        array_push($mailgroup, $user->user_email);
        if(count($mailgroup) == 20) {
            $headers = $headersBase . 'Bcc: '. implode(',', $mailgroup);
            wp_mail('', 'Email Update', $strBody, $headers);
            $sentEmailCount++;
            $headers = '';
            $mailgroup = array();
        }
        $sentUserCount++;
    }

我认为其原因是发送的最终消息中的电子邮件地址被退回,然后无论出于何种原因循环停止。有没有办法忽略任何错误并继续循环,而不管电子邮件是否退回?

【问题讨论】:

  • 假设 wp_mail 将被破坏,只需将其放入 try catch 或仅使用 @ 符号抑制...
  • 如果它导致脚本停止,那么它应该记录一个错误 - 你为什么不知道那个错误是什么?此外,即使没有错误,您的代码也无法向最后一组收件人发送任何电子邮件,除非它是 20 的倍数。
  • @symcbean:我正在使用 wp_schedule_event() 方法运行脚本。它每晚在后台运行,并向大量用户发送电子邮件。如果不发送会惹恼我的最终用户的电子邮件,我就无法真正测试它。我将如何捕获错误并记录它? wp_mail 可以在这里使用 try/catch 吗?我在脚本的开头添加了“error_reporting(0)”以忽略错误,我打算看看今晚会发生什么。想法? PS:我会在脚本循环后发送最后一封电子邮件,以防有更多地址。
  • 好吧...“error_reporting(0)”不起作用。循环仍然炸弹。
  • No error_logging() 不应该有任何影响 - 添加 try/catch 不会有帮助 - 如果发生致命错误,则不会被捕获.建议你去阅读PHP手册中关于错误处理的手册章节

标签: php wordpress smtp


【解决方案1】:

这最终导致遇到 gmail 为外发电子邮件设置的配额问题。我正在使用一个插件,该插件将 wp_mail() 函数设置为使用 SMTP 帐户来发送邮件。就我而言,我使用的是 gmail 帐户。看起来 gmail 似乎不允许在特定时间段内发送超过 100 条传出消息。我在每封电子邮件中向每 20 个用户(所有用户密件抄送)发送 1 封电子邮件。在它被炸毁之前,我只通过电子邮件循环 5 次(100 个用户)。该死的gmail。

我的解决方法是设置 Mandrill.com 帐户(免费),安装 Mandrill Wordpress 插件(免费),配置它,就是这样。现在我的 wp_mail() 函数使用 Mandrill 发送消息,似乎没有限制。无需修改我的脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多