向多个收件人发送电子邮件时出现问题

问题描述

| 我开始管理一个拥有超过50,000个注册会员的会员列表的网站。 我有这个问题: 每次我尝试发送电子邮件时,该页面都会运行几分钟(超过20分钟),最终以\“内部服务器错误\”结束。 现在,我不知道发送了多少邮件,或者根本不发送任何邮件。 我如何发送电子邮件: 我从数据库中选择所有电子邮件,运行一个循环,一个一个地发送。我选择此选项是因为: 我不想在“收件人”字段中添加几封电子邮件,因此将维护人们的隐私。 在密件抄送中添加电子邮件将使其显示垃圾邮件。 请我如何处理。 谢谢     

解决方法

        您需要做的就是将工作分解为可管理的部分,而不是阅读所有50,000封电子邮件并尝试全部发送。 一次只读取来自数据库的X封电子邮件。 分别发送该批X封电子邮件(如果
X = 10
,您将发送10封单独的电子邮件)。 发送每封电子邮件后,将每封电子邮件标记为“已发送”,否则,如果出现错误,您可能希望增加该特定电子邮件的“发送尝试次数”。 发送(或尝试)X封电子邮件后,更新您的统计信息以指示已发送X封电子邮件。 回到1。 我建议从ѭ1开始     ,        为此,我编写了一个脚本,该脚本使用上次处理的用户ID进行调用。 例如。 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编写的:)     ,        @ hamlin11的响应是正确的,如果您想管理发送给您的电子邮件如此之大,则必须将其分成小块并作为异步任务来管理。 要管理异步任务,您将有很多方法,一个子进程检查所有您正在等待某些异步作业的请求,一个单独的cron作业,从crontab调用cron.php脚本,甚至是psynnott答案,外部脚本最后重新启动。 但是,如果您对网站下的系统有一定的控制权,那么您也可以使用正确的工具完成正确的任务。向邮件列表管理器发送一封简单的电子邮件,它将为您完成这项工作。这仅意味着您在邮件列表管理器中创建了正确的用户列表。外部邮件列表管理器例如是mailman或sympa。这些工具包含您可以与之对话的机器人,用于为邮件列表收件人提供信息。@ psynnott答案可以看作是执行非常简单的邮件列表管理器任务的外部PHP脚本。如果您想根据某些用户参数来更改电子邮件的内容,则肯定必须编写自己的单独流程来管理任务。 但是您也可以搜索为您处理此工作的Web服务。垃圾邮件管理是一项艰巨的工作,管理一个官方的大邮件发送员也是一项艰巨的任务,但这当然不是免费的。