2011-06-12 111 views
2

我开始管理一个拥有超过50,000名注册会员的成员名单的网站。发送电子邮件给几个收件人的问题

我有这样的问题:

每次我尝试发送电子邮件,网页运行数分钟(超过20分钟),并最终与向上“内部服务器错误”结束。

现在,我不知道发送了多少邮件或者是否发送了邮件。

我如何发送电子邮件:

我从数据库中选择的所有电子邮件,运行一个循环,并发送一前一后。我选择了这个选项,因为:

  1. 我不想加入几封电子邮件“收件人”字段,让人们的隐私将保持不变。

  2. 在密件抄送中添加电子邮件会使其显示为垃圾邮件。

我该如何处理。

谢谢

+0

你使用标准的PHP邮件()函数吗? – konsolenfreddy 2011-06-12 08:02:57

+0

没有使用phpmailer – 2011-06-12 08:05:34

回答

3

所有你需要做的就是将作业分成可管理的单位,而不是读50,000名电子邮件,并试图把他们所有。

  1. 一次只能从数据库中读取X封电子邮件。
  2. 单独发送一批X电子邮件(如果X = 10,您将发送10封单独的电子邮件)。
  3. 每封电子邮件一发送,就将每封电子邮件标记为“已发送”,否则,如果发生错误,您可能希望增加该特定电子邮件的“发送尝试次数”。
  4. X电子邮件发送(或尝试)后,请更新您的统计信息以指示X电子邮件已发送。
  5. 回到1

我建议从X = 1

1

我通过使与它最后处理该用户的ID自称是一个脚本这样做。

E.g.然后sendmail.php将调用sendmail.php?id = 1,然后调用sendmail.php?id = 2等等。

这将解决您的超时问题。

在脚本中,您可以回显邮件命令的结果。如果它是假的,那么你可以回显出一个错误。

我还在我的用户表中添加了一个字段,用于发送邮件的日期和时间,所以我可以确认脚本的位置以防止浏览器死机。

您的获得下用户发送电子邮件到SQL然后将沿

Select useremail from users where sendmaildatetime is not null limit 1 

假设默认为sendmaildatetime列为空线的东西。

很抱歉,如果没有详细的IM不够,我可是从我的iPhone和它的皮塔:)

1

@ hamlin11响应写这个是对的,如果你要管理这么大的电子邮件发送你必须这样做小块并将此任务作为异步任务来管理。

要管理异步任务,您将拥有很多方法,一个子进程检查一些异步作业正在等待的所有请求,一个单独的cron作业,一个来自crontab的cron.php脚本调用,甚至psynnott回答,最后用外部脚本重新启动自己。

但是你也可以使用正确的工具进行正确的任务,如果你对你的网站下的系统有一些控制。发送一封简单的电子邮件给邮件列表管理器,它可以为您完成这项工作。这只会意味着你在邮件列表管理器中创建了正确的用户列表。外部邮件列表管理器例如是mailmansympa。这些工具包含机器人,您可以与之交谈来为邮件列表收件人提供邮件。@ psynnott答案可以被看作是执行非常简单的邮件列表管理器任务的外部PHP脚本。如果您想根据某些用户参数更改电子邮件的内容,那么您肯定必须编写自己的独立流程来管理任务。

但您也可以搜索网络服务为您处理这个工作。垃圾邮件管理是一项艰巨的工作,管理一个官方的大邮件也是一项艰巨的工作,但这当然不是免费的。

相关问题