使用php邮件VS梨功能处理许多电子邮件(但频率较慢)


Using php mail VS Pear function for many emails (but slow frequency)

我知道对于大量的电子邮件,建议使用Pear,但我想知道在我的情况下是否值得深入研究(我安装了它,但我有很多来自Pear的错误)

我需要向我的订阅者(大约2万)发送电子邮件,但我的主机每小时只允许200封电子邮件。这没关系,因为我不需要每个人都同时收到电子邮件,我可以在一个月内发送所有这些邮件,我不着急。

在这种情况下,可以有一个非常简单的循环,用mail()发送电子邮件,然后睡眠18秒(低于200封电子邮件/小时)。基本上,我想的只是做一些类似的事情

for($i=0;$i<=count($recipient);$i++)
{
   mail($recipient[$i].....);
   sleep(18);
}

与使用PEAR(需要更多的时间)相比,这可以吗?

您看过使用PEAR的Mail_Queue包吗?http://pear.php.net/package/Mail_Queue?您可以将其设置为在一个过程中发送X多封电子邮件,然后重新运行相同的脚本来发送下一个X多封。

除了简洁的电子邮件,我当然不会使用本地邮件功能来发送任何东西,也许是为了通知你应用程序中的特殊情况。

如果你的服务器是基于linux的,你可能会逃脱惩罚(见这个问题)。

虽然这听起来并不是一个很好的解决方案,但也要考虑到你似乎在对所有收件人(20k)使用for循环。

如果你不想使用PEAR,你可能想尝试每小时设置一个cron作业,以某种方式(使用文本文件或数据库)记住它发送电子邮件的最后一个用户,并发送下一批200个。

在这种情况下,您可能希望每125分钟设置一次cronjon,以确保不会达到限制。此外,在每个mail()之后使用sleep(1);将腾出CPU。

查看此问题以了解性能方面的注意事项。

首先,我不会说好的旧mail()的局限性。。。

  • 几乎所有内容的手动编码
  • 错误处理不力
  • 无身份验证(尽管对您来说不是问题)

与音量有关。

其次,我从未使用过PEARMail,所以我不能谈论它的性能或开销,但您的用例正是来自低容量的电子邮件服务器。你不需要高性能就可以慢慢地做事,是吗?

所以我敢说你使用了错误的标准来评估工具。

我的建议是,将mail()留给极其简单和不重要的任务(订户通信不符合条件),并使用适当的第三方邮件库,而不一定是PEAR。

特别是,Swift Mailer提供了Throttler插件,该插件专为满足您的要求而设计:

如果您的SMTP服务器有限制以限制速率如果你发送了哪些电子邮件,那么你的代码需要注意这一点速率限制。Throttler插件使Swift Mailer在速率受限的速度。

许多共享主机并没有将其SMTP服务器作为免费服务器打开。通常他们都有相应的政策(可能是为了阻止垃圾邮件发送者)这只允许你每小时/天发送固定数量的电子邮件。

Throttler插件支持两种模式的速率限制和每一个,你都需要计算出你想要的值。插件可以根据每分钟的电子邮件数量进行限制,或者每分钟传输的字节数。