使用PHP发送大量电子邮件

我正在写一个音乐博客。 pipe理员每2-3天发布一篇新文章。 一旦pipe理员发表文章,一个大量的电子邮件将立即发送到约5000个用户。

实现群发邮件function的最佳方式是什么?

以下function是否有效?

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附带的mail()函数并不是一个最佳的解决scheme。 它很容易被标记为垃圾邮件,您需要设置标题,以确保您正确发送HTML电子邮件。 至于代码片段是否可以工作,但是我怀疑你会正确地获取HTML代码而不指定额外的头文件

我build议你看看SwiftMailer ,它有HTML支持,支持不同的MIMEtypes和SMTPauthentication(这不太可能把你的邮件标记为垃圾邮件)。

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

在发送每封邮件之后,更新数据库以logging发送的date/时间。

先把它们放在数据库中

  1. logging你发送给谁的信息
  2. 如果你的脚本超时或失败,你必须再次运行它,那么你不会最终发送同样的电子邮件给人两次
  3. 你可以运行一个cron作业的发送进程,并且一次执行一个批处理,这样你的邮件服务器就不会被覆盖,并且跟踪发送的内容

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

如果你发送这么多的电子邮件,你一定会得到一些反弹。

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

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

至于如何让你的邮件适合雅虎,这完全是另一回事。 对于它的所有缺点,他们似乎在SPF和DomainKey中投入了大量股票。 你可能将不得不实施它们,这将需要你的邮件服务器pipe理员的合作。

您可以考虑使用CRON进行这种操作。 一次发送群发邮件当然不好,它可能被检测为垃圾邮件,ddos,崩溃你的服务器等。

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

你为什么不使用phplist ? 它也build立在PHP Mailer之上,许多行业领导者正在使用它。 我自己曾多次使用它来发送大量的邮件给我的客户。 关于phplist的好处是,您可以在域级别加上时间限制级别来限制消息。 有关function的完整列表, 请参见 : http : //www.phplist.com/details

我们已经用一些内部捕获系统完成了我们的工作,把我们的用户基础推到了mailling list,然后每天都有一个cron条目触发给定的邮件。 可能性是无止境的,这是开源的真棒!

不要使用标准的PHP工具向5000人发送电子邮件。 大部分互联网服务提供商会在几秒钟之内被禁止,甚至不知情。 你应该使用一些邮件列表软件或电子邮件服务提供商做到这一点。

还有梨包:

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

哭泣。

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

也看看PHPmailer类。 PHPMailer的

我已经使用Lotus NotusPHP 。 如果您有权访问邮件服务器,或者您可以向mail server请求某些东西,则此解决scheme可以工作:

1)在mail server创build一个组:“销售部门”。
2)分配你需要在group的账户。
3)为该组分配一个互联网地址:salesdept@DOMAIN.com。
4)使用邮件function创build你的PHP脚本:
$ to =“salesdept@DOMAIN.com”;
邮件($ to,$ subject,$ message,$ headers);

它为我工作,包括在组中的所有帐户收到邮件。

最好的运气。

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

 <?php $message = Swift_Message::newInstance() ->setSubject('Let\'s get together today.') ->setFrom(array('myfrom@domain.com' => '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(); ?> 

为什么要自己编程? 这是一个博客,只需使用Google Feedburner ,通过电子邮件自动将更新推送给订阅者。

它是免费的 ,它使用Google的基础设施 。 没有比这更好的了。 我用它的一些网站/博客,它奇妙的作品。

不利的一面是它似乎并没有得到积极的发展,也没有得到任何的支持 。 如果您认真对待您的业务,我build议您fr to于商业邮件列表。