我知道,对于大量的电子邮件,建议使用Pear,但我想知道在我的情况下是否值得深入研究(我安装了它,但我有很多来自PEAR的错误)
我需要向订阅者发送电子邮件(大约20K),但我的主机每小时只允许 200封电子邮件。这没关系,因为我不需要每个人同时收到电子邮件,我可以在一个月内发送所有这些邮件,我不赶时间。
在这种情况下,有一个非常简单的循环可以发送电子邮件发送邮件(),然后睡眠18秒(低于200电邮/小时)。基本上,我在想的只是做这样的事情
for($i=0;$i<=count($recipient);$i++)
{
mail($recipient[$i].....);
sleep(18);
}
这是否可以使用PEAR(需要更多时间)?
答案 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插件支持两种速率限制模式和 每一个,你都需要做数学计算才能找到你想要的值。 插件可以根据每分钟的电子邮件数量限制,或者 每分钟传输的字节数。