PHP大规模电子邮件最佳实践?(PHPMailer + Gmail)

14

我正在思考如何处理从我的 Web 应用程序发送大量电子邮件,以及是否有任何最佳实践可供采用。StackOverflow 已经将其标记为“主观的”,在某种程度上可能是这样,但我需要知道实现此系统的最成功方法,以及是否存在任何标准化方法。

在我的 Web 应用程序中,有一些用户负责管理 1 到 10,000 名用户的团队。这些用户必须能够通过我的系统向所有这些用户发送消息。因此,我的系统需要为每个组长向个别用户发送多达 10,000 封电子邮件。

据我所知,GMail 没有向个人发送消息的速率限制(尽管最多只能有 500 个收件人)。

目前,我的当前设置是:

  • 当通过系统发送消息时,它进入电子邮件队列。
  • 定期脚本会每隔几分钟从队列中获取邮件并发送出去。
  • 所有电子邮件都通过 GMail 的 SMTP 服务器进行发送。
  • 实际进行邮寄的应用程序是 PHPMailer。

随着用户数量的增加,这种设置可能不足以满足需求,我有以下问题:

  1. 我应该使用本地的 SMTP 服务器吗?
  2. 我应该使用本地机器上的邮件二进制文件?在这种情况下,我可能可以完全跳过队列?
  3. 是否有一种被认可的方法来完成这个任务?

谢谢!


感谢大家的回答,特别是Alfred的详细解答。一旦我的声望分数超过15分,我会给你们点赞的。 - Kenny
6个回答

10

Google App Engine

我会选择在Google App Engine (Python)上编写,原因如下:

  • 它能很好地扩展。
  • 它有一个很好的电子邮件API。
  • 它有一个任务队列,并且提供了访问该队列的良好API。
  • 因为Python是一种非常好的语言。
  • 它相对来说比较便宜。

PHP

如果我要用PHP实现这个功能,我会:

  • 寻找一个允许您发送此类邮件的好SMTP服务器,因为Gmail不允许您发送这种数量的邮件。我相信这将花费你一些钱。
  • 查找一个像PHPMailer这样的体面的PHP电子邮件库来发送邮件消息,就像你所说的那样。
  • 使用一个消息队列(例如beanstalkd)将电子邮件消息放入队列并异步发送电子邮件。首先,使用此方法用户将获得更快的页面加载速度。其次,使用像beanstalkd这样的消息队列,您可以更好地调节发送速度,从而防止过度负载您的计算机。您需要通过SSH访问服务器来编译(安装)beanstalkd。您可以在beanstalkd找到它。
  • 您还需要通过SSH访问运行在后台的PHP脚本,该脚本将处理消息队列。您可以在php beanstalkd-client找到一个beanstalkd客户端。

从PHP / Apache /网页发送

这是您将向用户发送消息的页面。从此页面,您将通过编写类似于以下代码的内容将消息发送到beanstalkd:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

您需要使用put命令将消息放入消息队列中。

在后台运行的长时间运行的PHP脚本中:

代码应该类似于这样:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

就像我说的,使用PHP和Google App Engine都是可能的,但我会选择App Engine,因为它更容易实现。


6

如果一天的邮件数量高达10,000封,我不会依赖GMail(或其他)SMTP。并不是他们无法处理,很明显他们可以处理更多。但他们可能不想这样做。

拥有本地SMTP服务器是我认为应该采用的方法:

  • 它相当容易设置(只需不让人们在没有强大的身份验证方案的情况下使用它)
  • 大多数现代MTA非常擅长处理发送队列
  • 您将不必因配额原因而被GMail(或其他人)决定阻止您的帐户

0

Gmail和Google Apps每天限制您发送约500封电子邮件。我不确定这如何与最多500个收件人相结合,但如果您想发送10,000封电子邮件,您可能需要找另一个邮件服务器。我个人使用本地服务器或ISP或数据中心的SMTP。

如果您发送了这么多电子邮件,我建议使用队列,以便用户不必坐等电子邮件发送。


0

在编程过程中,请非常注意您的域名不要被列入垃圾邮件域名黑名单。如果被列入黑名单,您的大部分邮件(包括支持、销售等)都将被阻止,这可能会非常昂贵。

相反,您可以考虑使用类似AWeber的服务。他们不仅能够处理这些数量的电子邮件,而且还可以为您提供更多的指标,这些指标可能比您自己实现的要更加全面。


0

我不确定它是否已经发布在任何地方,但从经验上讲,如果您一次发送大量邮件,Gmail会对您的帐户进行约15分钟的冻结。这在上周发生了对我来说。我认为你应该托管自己的SMTP服务器。经常使用mail()函数会将您的邮件放入某人的垃圾邮件文件夹中。


0

只需在本地机器上或同一局域网中的一台机器上安装Postfix,以获得最大的访问速度。确保它从外部得到很好的保护,并且从内部快速访问。

然后编写您的PHP脚本,直接将电子邮件注入Postfix队列。这将显着提高邮件传递的处理速度。


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