使用 PHP 发送群发电子邮件

2022-08-30 10:07:42

我目前正在写一个音乐博客。管理员每 2-3 天发布一篇新文章。一旦管理员发布文章,将立即向大约5000名订阅者发送一封群发电子邮件。

实现群发邮件功能的最佳方法是什么?

以下函数是否有效?

function massmail() 
{
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);
  }
}

另一个问题:如果所有5000个订阅者都在使用雅虎邮件,雅虎会将其视为DDOS攻击并阻止我的SMTP服务器的IP地址吗?


答案 1

首先,使用PHP附带的mail()函数并不是最佳解决方案。它很容易被标记为垃圾邮件,您需要设置标头以确保正确发送HTML电子邮件。至于代码片段是否有效,它会,但我怀疑你会在不指定额外标题的情况下正确获取HTML代码。

我建议你看看SwiftMailer,它具有HTML支持,支持不同的哑剧类型和SMTP身份验证(不太可能将您的邮件标记为垃圾邮件)。


答案 2

我会将所有电子邮件插入到数据库中(有点像队列),然后像在代码中所做的那样一次处理一个(如果你想使用swiftmailer或phpmailer等,你也可以这样做。

发送每封邮件后,更新数据库以记录发送的日期/时间。

通过首先将它们放入数据库中,您就拥有

  1. 您发送给谁的记录
  2. 如果您的脚本超时或失败,并且您必须再次运行它,那么您最终不会向人们发送相同的电子邮件两次
  3. 您可以从cron作业运行发送过程并一次执行批处理,以便您的邮件服务器不会不堪重负,并跟踪已发送的内容

请记住,如何自动退回的电子邮件或无效电子邮件,以便它们可以从列表中自动删除。

如果您要发送那么多电子邮件,您一定会收到一些退回邮件。


推荐