我开始管理一个网站,其中包含超过50,000名注册会员的会员名单。
我遇到了这个问题:
每次尝试发送电子邮件时,页面都会运行几分钟(超过20分钟),最终以“内部服务器错误”结束。
现在,我不知道发送了多少邮件,或者根本发送了多少邮件。
如何发送电子邮件:
我从数据库中选择所有电子邮件,运行循环并一个接一个地发送。我选择这个选项是因为:
我不想在“收件人”字段中添加多封电子邮件,因此会维护人们的隐私。
在密件抄送中添加电子邮件会使其显示为垃圾邮件。
请我该如何处理。
谢谢
答案 0 :(得分:3)
您需要做的就是将工作分成可管理的块,而不是阅读所有50,000封电子邮件并尝试将它们全部发送。
X = 10
,您将发送10封单独的电子邮件)。 我建议从X = 1
答案 1 :(得分:1)
我这样做是通过制作一个脚本,用自己上次处理的用户的id调用自己。
E.g。然后sendmail.php将调用sendmail.php?id = 1,然后调用sendmail.php?id = 2等等。
这将解决您的超时问题。
在脚本中,您可以回显mail命令的结果。如果它是假的,那么你可以回应一个错误。
我还在我的用户表中添加了一个字段,用于邮件发送日期和时间,因此我可以确认脚本导致浏览器死亡的位置。
您的sql用于让下一个用户发送电子邮件,这将是
的内容Select useremail from users where sendmaildatetime is not null limit 1
假设sendmaildatetime列的默认值为null。
对不起,如果我不够详细,我从我的iPhone和它的PITA写这个:)
答案 2 :(得分:1)
@ hamlin11响应是对的,如果你想管理如此大的电子邮件发送你必须以小块的形式进行,并将此任务作为异步任务进行管理。
要管理异步任务,您将有很多方法,对一些异步作业等待的所有请求进行子进程检查,单独的cron作业,从crontab调用cron.php脚本,甚至psynnott回答,最后用外部脚本重新启动自己。
但是,如果您对网站下的系统有一些控制权,那么您也可以使用正确的工具来完成正确的任务。发送一封简单的电子邮件给邮件列表管理器,它可以帮助您完成工作。这只意味着您在邮件列表管理器中创建了正确的用户列表。外部邮件列表管理器例如是mailman或sympa。这些工具包含您可以与之交谈的机器人,以便为邮件列表收件人提供信息。@ psynnott答案可以看作是执行非常简单的邮件列表管理器任务的外部PHP脚本。如果您想根据某些用户参数更改电子邮件的内容,您肯定必须编写自己的独立流程来管理任务。
但您也可以搜索网络服务为您处理此工作。垃圾邮件管理是一项艰巨的工作,管理一个官方的大邮件也是一项艰苦的工作,但当然这不是免费的。