为什么我的邮件被发送了不止一次


why my mail is sent more than once?

我开发了一些php代码,它可以向在我的数据库中注册的一些用户发送邮件。问题是,当我通过导航器执行此脚本时,它会加载大量时间,并且我必须通过导航器的 X 按钮停止加载(在我的情况下是谷歌浏览器)。邮件发送了不止一次,我不知道为什么。

我有这个代码:

global $wpdb;
$blogs = $wpdb->get_results("SELECT * FROM wp_premios");
foreach ( $blogs as $blog ) {
    $to = $blog->email;
    if( wp_mail( $to, $subject, $message, $headers ) == true ){
        echo "Mail sent properly";
    }
}

它使用WordPress的API。

注意:我已经将这封邮件发送给自己,并且它只正确发送了一次,但是当我使用上面的代码时,问题就来了。我有 600 个用户,这不是一个很大的数字。

我认为脚本断开了与数据库的连接,并尝试重新连接,并且重新发送邮件......我没有找到其他原因。

我希望你的帮助。非常感谢,丹尼尔

根据 Wordpress 文档,wp_mail 的 $to 参数可以是字符串或数组,这意味着您可以将电子邮件地址存储在数组中,循环结束后,您可以将该数组用作$to。

该解决方案的问题在于,将阅读该电子邮件的所有用户都将看到所有其他电子邮件地址。为了规避这一点,您可以使用密件抄送标头,如下所示:

$headers = array();
foreach ($blogs as $blog) {
    $headers[] = 'Bcc: '. $blog->email;
}
wp_mail('you@example.com', $subject, $message, $headers);

作为旁注,您只能从数据库中选择电子邮件字段,因为它是您使用的唯一字段。

我曾经遇到过这个问题,那是因为我两次包含wp-blog-header。它实际上是一个插件,但只需将 require 更改为 require_once() 即可解决 - 由于博客标题总结了所有 wp 钩子和函数,因此所有这些都被触发了两次

希望对;)有所帮助