1

我有大量用户同意接收每日通讯。时事通讯的内容是自动生成的,所以唯一要做的就是设置一个发送电子邮件的 cron 作业。

但是,如果有例如 10.000 个用户,这样的 cron 作业会杀死我的服务器。可以做些什么来解决这个问题?

发送 100 封电子邮件后 sleep(1) 是否足够?(当然将执行时间限制设置为 1 天)

4

2 回答 2

4

看看http://php.net/manual/en/function.mail.php

笔记:

值得注意的是,mail() 函数不适合循环处理大量电子邮件。此函数为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。

如需发送大量电子邮件,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。

所以只需使用 Mail_Queue 包......它会接收每封邮件,然后简单地处理它们。

于 2012-09-28T08:31:16.573 回答
3

几个月前,我为项目制作了一个发送电子邮件的系统,所以我做了以下工作:

在数据库中,我有 3 个表:

用户
user_emails(一些用户有多个电子邮件)
email_campaign(这是我在发送活动时临时存储数据的表,完成后我截断其中的所有内容)

当我开始发送活动时,我在 email_campaign 表中为我完成发送电子邮件的每个用户插入行。
这样,如果在活动结束前发生错误,我就知道从哪里继续,知道我向谁发送了电子邮件以及需要向谁发送电子邮件。

实际上,我能够在 2 小时内发送 45.000 封电子邮件。没有服务器过载。
我在每 100 封电子邮件上使用 sleep(),就像你想做的那样。
我还在凌晨 2 点发送广告系列,当时我的服务器负载最低。

您还可以将电子邮件服务器配置为每小时发送有限数量的电子邮件。
这会减慢发送速度,但会减少服务器负载。

于 2012-09-28T08:41:30.120 回答