好了,这里是我的问题:在PHP延迟电子邮件,以避免超出服务器限制
我有一个网站上的会员名单,以及管理员的周期性一个我的网站(谁是不太网站或科技知识)将发送简讯给会员名单。 我目前的会员名单长度超过800人。
所以,我写的是发送电子邮件到全会员,在密件抄送标题列出的成员的电子邮件的脚本。
然而,我发现,我的主机服务器每小时300个电子邮件,即使成员在密件抄送字段中列出我显然超出极限。 (我以前没有意识到,密件的行为是派遣独立的电子邮件。对名单上的每一个名字......)
经过一番思考,我得出的结论是我唯一的解决办法是让我脚本只会将电子邮件发送给前300封电子邮件,等待一个小时,然后再发送另一封电子邮件给另外300封电子邮件,再等一小时,等等,直到我将电子邮件发送到整个成员列表。
在互联网上环顾四周,我已经看到了一些其他的解决方案,人们纷纷拿出在PHP延缓电子邮件。 Sleep()显然不是一种选择,因为我不能将脚本保持打开并运行3到4个小时。我见过一些人提出cron作业,但我不确定在每次发送电子邮件时创建三个新的cron作业,使用它们一次,然后删除它们,这是多么可行。 我见过的最终(和我认为最聪明的)解决方案是在我的数据库中有一张表来临时存储要延迟并稍后发送的电子邮件,然后创建一个cron作业,每次检查此sql表小时左右,将该行的时间戳与当前时间戳进行比较,然后在一小时后发送电子邮件。
所以我问你所有推荐的方法。有没有更容易的解决方案,我已经完全查看了(除了获得不同的托管计划,哈!),还是有比数据库/ cron工作方法更干净的方法吗?
tl; dr:我有超过800封电子邮件在服务器上发送,一小时内将我限制为300个小时。使用PHP,找到一种方法来解决这个问题,发送电子邮件的人只需点击“发送”即可。
我对Gearman没有任何经验,但从我的链接中读到的内容看起来非常有趣。 那么,Gearman的工作人员会允许我在后台运行睡眠呼叫过程?或者,我是否也必须将流程转移到另一台服务器? – Polyonymy 2010-03-24 02:19:26
啊,在GearmanClient类中找到我的答案。 doBackground()将完美工作。 谢谢多米尼克! – Polyonymy 2010-03-24 02:28:43