如何在php中安排电子邮件通知

时间:2011-03-09 09:00:57

标签: php email

我知道如何使用PHPmail发送电子邮件。但是,如果我需要发送大量电子邮件呢?

这可能是发布新消息时网站订阅者的“通知”。直接在页面处理程序中执行此操作将严重影响性能并使浏览器加载速度过慢。所以我需要在“背景”中完成这项工作。

在我的情况下,如何在PHP中“安排”某些内容 - 发送电子邮件?例如,在C ++中,我将创建一个单独的线程,但AFAIK在PHP中没有多线程这样的东西。

7 个答案:

答案 0 :(得分:8)

创建CRON作业,发送您保存在数据库中的电子邮件队列:

  1. 将包含所有信息的电子邮件保存到数据库中。

  2. 定期使用CRON作业(例如每半小时左右 - 取决于您的托管服务提供商和您发送的电子邮件数量)从队列中抓取电子邮件并将其发送出去。然后在数据库中的电子邮件上设置sent标记,添加所需的发送信息(例如时间,错误,标题等)。

  3. 请务必将电子邮件分解为多块,然后暂停发送,以避免某些电子邮件服务器的反垃圾邮件和防洪保护问题。一些邮件库有插件(如SwiftMailer)。

答案 1 :(得分:3)

要安排这样的事情,最好使用cronjobs,这是在服务器本身而不是PHP中定义的。但是,cronjob可以调用PHP脚本来执行 使用cronjob执行此操作有一些优点,因为它不会(直接)影响最终用户的性能,您可以在特定时间运行它。

答案 2 :(得分:2)

将所有电子邮件数据存储在Mysql数据库中。 表结构可能就像。

TO_EMAIL_ID | EMAIL_TYPE |电子邮件主题| EMAIL_CONTENT |已加工| INSERT_TIME。

将所有电子邮件内容插入此表格。 并有一个PHP脚本,从该表中获取数据并批量发送电子邮件, 并删除/标记处理发送的电子邮件。 假设该文件是sendMailers.php 然后,您可以设置一个cron作业,每5分钟运行一次该文件。 见http://www.foogazi.com/2006/12/07/understand-cron-jobs-in-5-minutes/

*/5 * * * * PATH_TO_PHP  sendMailers.php

答案 3 :(得分:2)

您可以使用cron作业定期运行脚本并发送任何未完成的通知。

另一种方法是在后台启动另一个进程,使用类似:exec('php send_notifications.php 1>/dev/null 2>1 &');(注意最后的内容)。

答案 4 :(得分:1)

您可以将Create Cron Jobs用于此目的,并查看以下Discussion

答案 5 :(得分:1)

我使用后台进程(如果您可以通过CLI [命令行界面]访问服务器,则可以从命令行运行PHP程序)。该进程检查MySql表以查找排队等待发送的电子邮件。

在我的方法中,浏览器不用于发送电子邮件,而只是用于将其写入MySql表。

答案 6 :(得分:0)

您需要在Windows中使用计划任务,或在类似Unix的操作系统(即:linux)中使用cron作业。