在没有cron的情况下发送邮件

时间:2011-09-07 12:27:09

标签: php mysql linux email background-process

我想知道是否有办法运行PHP循环,以便在后台向订阅者发送几百封电子邮件。我的目标是格式化新闻稿,单击发送,然后关闭浏览器或更改页面。当然,发送电子邮件的实际过程将在后台运行,不会因浏览器关闭而中断。

我知道这可以通过读取保存在MySQL或文本文件中的队列的cron作业来完成,但是这样,即使长时间没有队列,cron也会一直运行,寻找队列...

我在一个名为Pommo(https://github.com/soonick/poMMo)的脚本中看到了这个功能,但似乎无法理解它是如何完成的。

有没有人对此有所了解?

3 个答案:

答案 0 :(得分:0)

  

我知道这可以通过从保存的队列读取的cron作业来完成   MySQL或文本文件,但这样,即使长时间没有队列   期间,cron将一直运行,寻找队列......

这几乎击败了Cron的目的。您应该创建一个每15分钟运行一次的作业,并检查队列中是否有需要发送的邮件。如果没有邮件,让脚本死掉,它会在15分钟内再次运行。

如果要发送邮件,请在开始发送之前更新行以指示您正在处理这些邮件,因此运行时间超过15分钟不会导致其他脚本实例发送相同的邮件。

答案 1 :(得分:0)

您需要一个队列系统。例如有Beanstalkd用于linux,你可以用PHP提供东西。

答案 2 :(得分:0)

我打算在你的问题中添加评论,但是我没有足够的空间来格式化并给出这个例子。

以下是我认为可行的想法:

1 - 将您要发送的所有电子邮件加载到数据库或文件中。

2 - 从您的网络应用程序中单击按钮发送电子邮件。这将向服务器提交Ajax请求。您可以定义要在特定时间范围内发送的电子邮件数量。请记住,大多数主机都限制您每小时可以发送的电子邮件数量。

3 - 创建一个php脚本,它将接收Ajax请求并发送您定义的参数中的所有电子邮件。

4 - 我相信您可以杀死您的网络浏览器,因为PHP脚本将在整个列表中运行,并且在完成发送所有电子邮件之前不会返回。

以上可能会奏效,但我永远不会这样做。我会使用如上所述的cronjob。你的cronjob只需检查是否有发送的电子邮件。这不是资源密集型。

如果您决定实施上述想法,请务必告知我们。我很好奇这是否有效。

祝你好运!

相关问题