使用PHP邮件VS Pear功能用于许多电子邮件(但频率较慢)

时间:2014-04-09 09:59:48

标签: php email pear

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

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

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

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

这是否可以使用PEAR(需要更多时间)?

3 个答案:

答案 0 :(得分:2)

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

我当然不会使用本机邮件功能发送任何内容而不是简洁的电子邮件,或许是为了通知您应用程序中的异常情况。

答案 1 :(得分:1)

如果您的服务器是基于Linux的,那么您可能会侥幸成功(参见this question)。

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

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

在这种情况下,你可能想要每125分钟设置一次cronjon,以确保你没有达到极限。在每个sleep(1);之后使用mail()也会占用CPU。

出于性能考虑,请查看this question

答案 2 :(得分:1)

首先,我不会说好老mail()的限制......

  • 几乎所有内容的手动编码
  • 错误处理不善
  • 无身份验证(虽然不是您的问题)

...与音量有关。

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

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

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

特别是,Swift Mailer功能Throttler Plugin旨在完全符合您的要求:

  

如果您的SMTP服务器有限制以限制费率   您发送电子邮件,然后您的代码将需要知道这一点   限速。 Throttler插件让Swift Mailer运行起来   速率限制。

     

许多共享主机不会将其SMTP服务器作为免费版本打开。   通常他们有政策(可能会阻止垃圾邮件发送者)   只允许您每小时/每天发送固定数量的电子邮件。

     

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