我有大量用户同意接收每日通讯。时事通讯的内容是自动生成的,所以唯一要做的就是设置一个发送电子邮件的 cron 作业。
但是,如果有例如 10.000 个用户,这样的 cron 作业会杀死我的服务器。可以做些什么来解决这个问题?
发送 100 封电子邮件后 sleep(1) 是否足够?(当然将执行时间限制设置为 1 天)
我有大量用户同意接收每日通讯。时事通讯的内容是自动生成的,所以唯一要做的就是设置一个发送电子邮件的 cron 作业。
但是,如果有例如 10.000 个用户,这样的 cron 作业会杀死我的服务器。可以做些什么来解决这个问题?
发送 100 封电子邮件后 sleep(1) 是否足够?(当然将执行时间限制设置为 1 天)
看看http://php.net/manual/en/function.mail.php
笔记:
值得注意的是,mail() 函数不适合循环处理大量电子邮件。此函数为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。
如需发送大量电子邮件,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。
所以只需使用 Mail_Queue 包......它会接收每封邮件,然后简单地处理它们。
几个月前,我为项目制作了一个发送电子邮件的系统,所以我做了以下工作:
在数据库中,我有 3 个表:
用户
user_emails(一些用户有多个电子邮件)
email_campaign(这是我在发送活动时临时存储数据的表,完成后我截断其中的所有内容)
当我开始发送活动时,我在 email_campaign 表中为我完成发送电子邮件的每个用户插入行。
这样,如果在活动结束前发生错误,我就知道从哪里继续,知道我向谁发送了电子邮件以及需要向谁发送电子邮件。
实际上,我能够在 2 小时内发送 45.000 封电子邮件。没有服务器过载。
我在每 100 封电子邮件上使用 sleep(),就像你想做的那样。
我还在凌晨 2 点发送广告系列,当时我的服务器负载最低。
您还可以将电子邮件服务器配置为每小时发送有限数量的电子邮件。
这会减慢发送速度,但会减少服务器负载。