2011-05-27 56 views
0

从编程角度来说,什么是间隔发送批量电子邮件而避免PHP超时的简单直接方式?这是为了联系属于一个站点的几千名成员。交错电子邮件发送

P.S:思考沿分裂的条件发送到N个电子邮件地址和脚本以某种方式自称。

+1

我只想通过第三方服务。 – 2011-05-27 15:40:43

+0

轻松的话题,但如果这是你反复计划的事情,你可能会考虑发送批量电子邮件的商业解决方案。如果您不小心,可能会被标记为垃圾邮件发送者。 – Greg 2011-05-27 15:42:37

回答

1

如果发送到所有订阅的网站,你可以做到以下几点:

  1. 用户表中添加列(如果它不存在 ),东西 像“email_sent “并默认为1 (代表是)
  2. 当你执行你的邮件发送 触发,更新所有用户记录 设定‘email_sent’标志0 (因为没有)。
  3. 建立一个执行 PHP脚本cron作业(甚至击中使用指定的页面您的Web 服务器 执行脚本),然后 选择具有 “email_sent”设置为0,第N个用户,发送他们 电子邮件,并将每个成功的'email_sent' 列更新为1。

如果您要处理多个邮件,您需要通过另一个维护用户的表加入:mailout关系和'email_sent'状态。

+0

一个明智的解决方案。我可能会在中期添加这些更改以改进网站。 – 2011-05-28 04:07:42

2

最简单的方法是只需几秒钟入睡后的电子邮件每x号码发送:

$count = 0 
while (foo) { 
    send_email(); 
    if ($count++ == 100) { 
     sleep(10);//sleep for 10 seconds 
     $count = 0; 
    } 
} 
+0

虽然这不会避免PHP超时。它可能通过浪费时间睡觉而不是花费邮寄来鼓励它。 – 2011-05-27 15:42:58

+0

@Marc:不完全正确,花在睡眠上的时间不会影响脚本的执行时间。当然,脚本运行需要更长的时间,我同意确实有更高效的方法来完成目标,但OP要求提供一个简单而直接的解决方案。 – 2011-05-27 15:52:58

+0

我可能会试试这个。我想要一个简单而直接的解决方案的原因是尽快让一些东西运行。之后我可以看看改进。我正在探索的另一条路线是使用Ajax调用一个页面,并通过50封左右的电子邮件发送电子邮件。 – 2011-05-28 04:05:15

1

您还可以尝试使用sleep命令或手动交错cronjobs但一个更好的选择可能会寻找到一个既定的库处理的细节为您提供:PEAR Mail_Queue

的Mail_Queue类把邮件在 临时容器,等待被送入 到MTA(邮件传输代理),和 稍后发送它们(例如,某种 每隔几分钟的邮件数量)通过 crontab或以其他方式。

也有很多公司会以一个价格为您处理所有这些,如果这是您的选择。

+0

去与第三方不是一种选择。梨看起来很有趣。我希望它支持PHP邮件功能,因为没有SMTP(由主机禁用)。 – 2011-05-28 04:12:17