0

好的,这是我的问题:

我有一个网站上的成员列表,并且我的网站的一位管理员(不是非常精通网络或技术)会定期向成员列表发送时事通讯。我目前的成员名单有 800 多人。

因此,我编写了一个电子邮件脚本,将电子邮件发送到完整的成员列表,成员列在密件抄送标题中。

但是,我发现我的主机服务器每小时有 300 封电子邮件的限制,即使成员列在密件抄送字段中,我显然也超过了这个限制。(我以前不知道密件抄送的行为是为列表中的每个名称发送单独的电子邮件......)

经过一番思考,我得出的结论是,我唯一的解决方案是让我的脚本只向前 300 封电子邮件发送电子邮件,等待一个小时,然后向接下来的 300 封电子邮件发送第二封电子邮件,再等一个小时,依此类推,直到我将电子邮件发送到整个成员列表。

在互联网上环顾四周,我看到人们提出了一些其他解决方案,用于延迟 PHP 中的电子邮件。Sleep() 显然不是一个选项,因为我不能只让脚本打开并运行 3 或 4 个小时。我看到有人建议 cron 作业,但我不确定每次发送电子邮件时创建三个新的 cron 作业,使用一次,然后删除它们是否可行。我见过的最终(我认为是最聪明的)解决方案是在我的数据库中有一个表来临时存储要延迟和稍后发送的电子邮件,然后创建一个 cron 作业,每小时检查一次这个 sql 表左右,将行的时间戳与当前时间戳进行比较,如果一个小时过去了,则发送电子邮件。

所以我问大家你会推荐哪种方法。有没有我已经完全看过的更简单的解决方案(除了获得不同的托管计划。哈!),或者有没有比数据库/cron作业方法更清洁的方法?

tl;博士:我有超过 800 封电子邮件要在一小时内在服务器上发送,这将我限制为 300/小时。使用 PHP,找到一种解决此问题的方法,即发送电子邮件的人只需单击“发送”。

4

3 回答 3

1

你可以把它发送到一个齿轮人队列中,然后让一个齿轮人工作人员进行适当的睡眠呼叫。见http://gearman.org/http://php.net/gearman

于 2010-03-23T18:10:12.323 回答
0

听起来您需要设置一个批处理功能,该功能从要发送的消息池中提取并在每次在 cron 期间运行时处理 X。然后,您将有一个表格来跟踪已发送的消息以及发送给谁,这样您就可以跟踪谁收到了电子邮件。

于 2010-03-23T18:07:15.637 回答
0

我建议您创建一个队列,并在每次需要发送电子邮件时处理队列中的 X 个项目。消息的发件人只需将电子邮件放入队列中,您的处理代码就会选择在该期间发送最大数量的项目的项目。有时您会遇到故障,使用队列将允许简单的恢复。您仅在处理项目时从队列中删除项目。

您可以使用简单的数据库表作为队列,但您可能更喜欢使用专业的队列解决方案。

另一个建议是研究外部电子邮件服务,例如Strongmail。这些将帮助您每小时发送更多电子邮件。

于 2010-03-23T18:12:30.403 回答