使用PHP发送大量电子邮件

问题描述 投票:48回答:11

我目前正在写一个音乐博客。管理员每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个订户都使用Yahoo Mail,雅虎会将其视为DDOS攻击并阻止我的SMTP服务器的IP地址吗?

php email bulk massmail
11个回答
47
投票

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

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


0
投票

你可以使用swiftmailer。通过使用批处理。

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\'s get together today.')
      ->setFrom(array('[email protected]' => 'From Me'))
      ->setBody('Here is the message itself')
      ->addPart('<b>Test message being sent!!</b>', 'text/html');

    $data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
    while($row = mysql_fetch_assoc($data))
    {
       $message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
    }

    $message->batchSend();
?>

-1
投票

为什么要打扰自己?这是一个博客,只需使用Google Feedburner,它会通过电子邮件自动向订阅者推送更新。

它是免费的,它使用谷歌的基础设施。不能比这更好。我将它用于我的一些网站/博客,它的工作非常好。

缺点是它似乎没有积极开发,也不再受支持。如果你认真对待自己的业务,我建议你不要去商业电子邮件列表。


31
投票

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

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

首先将它们放入数据库中

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

请注意,如何自动发送退回的电子邮件或无效的电子邮件,以便他们可以自动从列表中删除。

如果你发送了很多电子邮件,你肯定会获得一些反弹。


17
投票

这是建议,而不是答案:使用专用邮件列表软件你会好得多。 mailman是一个常用的例子,但像mlmmj这样简单的东西就足够了。发送大量邮件实际上比实际看起来更困难。您不仅需要发送邮件,还必须跟踪“死”地址,以避免您的邮件,或者更糟糕的是,您的邮件服务器被标记为垃圾邮件。出于同样的原因,你必须处理取消订阅的人。

你可以自己实现这些东西,但特别是弹跳处理是困难和无益的工作。使用邮件列表管理器可以使事情变得更容易。

至于如何让你的邮件适合雅虎,这完全是另一回事。尽管有这些缺点,但他们似乎在SPF和DomainKey上投入了大量资金。您可能必须实现它们,这将需要您的邮件服务器管理员的合作。


12
投票

您可以考虑将CRON用于此类操作。一次发送大量邮件肯定不好,它可能被检测为垃圾邮件,ddos,崩溃你的服务器等。

所以CRON可能是一个很好的解决方案,一次发送100封邮件,然后等待几分钟,接下来的100封等等。


10
投票

不要使用标准PHP工具向5,000人发送电子邮件。您将在几秒钟内被大多数ISP禁止,甚至从未知道。你应该使用一些邮件列表软件或Email Service Provider做到这一点。


8
投票

你为什么不宁愿使用phplist?它也建立在PHP Mailer之上,很多行业领导者正在使用它。我自己曾经多次使用它向我的客户发送大量邮件。关于phplist的好处是你可以在域级加上时间限制级别来限制你的消息。

我们用几个内部捕获系统完成的工作就是将我们的用户群推送到填充列表,然后每天都有一个cron条目触发给定的邮件。可能性是无穷无尽的,这是开源的绝佳之处!


4
投票

梨包也是:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

下。

PS:不要使用mail()发送5000封电子邮件。除了其他人所说的,这是非常低效的,因为mail()为每个电子邮件集创建一个单独的套接字,甚至是同一个MTA。


2
投票

另请参阅PHPmailer类。 PHPMailer


0
投票

我已经使用Lotus NotusPHP做到了。如果您有权访问邮件服务器,或者您可以向mail server管理员请求某些内容,则此解决方案有效:

1)在mail server中创建一个组:“Sales Department”。 2)向group分配您需要在该组中的帐户。 3)为该组分配一个互联网地址:[email protected]。 4)使用mail函数创建PHP脚本: $ to =“[email protected]”; 邮件($ to,$ subject,$ message,$ headers); 它对我有用,并且该组中包含的所有帐户都收到了邮件。 最好的运气。

© www.soinside.com 2019 - 2024. All rights reserved.