基于PHP的Web应用程序和大规模邮件发送

3

我开发了一个网络应用程序,学生们可以在全国范围内注册以完成某些学术目的。预计用户数量将在明年达到10万人左右。

我需要定期向所有这些用户发送邮件。该Web应用程序使用CodeIgniter开发。PHP脚本可运行3000秒。但是该应用程序仍无法向超过100个用户发送电子邮件。

我运行的机器位于云端,并配备256MB RAM。我使用“free -m”命令检查内存使用情况,但似乎没有问题。一切都正常工作,只能发送10-20封邮件。

有什么最佳解决方案吗?是否有办法将此工作转移到其他应用程序/程序/Shell脚本中?

5个回答

1

如果您无法使用某些外部服务来发送电子邮件,我建议您设置一个cronjob,每n秒钟发送几封电子邮件。使用php发送大量电子邮件非常麻烦,正如您所发现的那样。但是据我所知,cronjob解决方案始终有效。

因此,您拥有一份电子邮件/地址列表和一个cronjob,该cronjob迭代该列表并发送电子邮件。


1

MailChimp是一个可行的选择。发送邮件是一项耗时的任务,将其发送到100k个电子邮件地址将是您的服务器的艰巨任务。

他们提供了一个非常强大的PHP API。

https://developer.mailchimp.com/


1

确实,您可以从服务器自己发送电子邮件,但这只是半个战斗。

如果您发送的是批量电子邮件而不是交易类型的邮件,则最好使用已经在邮件服务器上获得白名单的第三方服务。主要原因是,您可能会被主要邮件服务器列为垃圾邮件发送者。如果发生这种情况,您将不得不与它们单独合作以从黑名单中删除。

此外,如果您在美国运营,则应该熟悉CAN-SPAM法规:http://business.ftc.gov/documents/bus61-can-spam-act-Compliance-Guide-for-Business


0

将这些任务从 Web 服务器线程中分离出来并放入独立运行的程序中非常合适。通常情况下,我会在数据库中创建表格,将相关信息从网站写入其中,当我准备发送电子邮件时,后端程序可以组装电子邮件并将其发送出去。如果您要发送 100,000 封电子邮件,您需要使用多线程工具。

在这种情况下,使用现成的工具可能比自己重新发明轮子更好。我们在这里使用的是 Campaign Enterprise 的旧版本,我能够向它发送查询,直接通过 ODBC 从我的 Web 数据库中提取数据。考虑到您在云端,这可能适用于您,也可能不适用。

编辑:您还可以编写一个 PHP 脚本来完成此操作,并从 shell 中调用 PHP。也许您可以通过这种方式避免超时限制?(这是假设您正在参考某个服务级别的超时限制。如果您谈论的是常规 PHP 超时,则可以使用 set_time_limit() 来解决。)


你能推荐一些免费的工具吗? - Eastern Monk

0

你可以尝试使用pcntl_fork或创建一个守护进程来实现。

Fork:通过使用fork进程,您可以将电子邮件分批处理并发送。每个批次可以在自己的fork子进程中运行。

守护进程:通过使用守护进程,您可以创建一批电子邮件并将其发送到守护进程进行处理。守护进程可以同时运行多个批次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接