PHP Mass Email最佳实践?(PHPMailer + Gmail)

Ken*_*nny 14 php email standards gmail

我正在考虑如何处理从我的Web应用程序发送大量电子邮件,以及是否有任何最佳实践.StackOverflow已经将其标记为"主观",它可能在一定程度上,但我需要知道实现该系统的最成功方法,或者是否存在任何标准化方法.

在我的webapp中,有些用户是1到10,000个用户的组长.此用户必须能够通过我的系统向所有这些用户发送电子邮件.因此,我的系统负责为每个组头向每个用户发送最多10,000封电子邮件.

据我所知,GMail没有向个人发送邮件的速率限制(尽管最多有500个收件人).

现在,我目前的设置是:

  • 当通过系统发送消息时,它将进入电子邮件队列.
  • cron脚本每隔几分钟就会从队列中获取消息,然后发送这些电子邮件.
  • 所有电子邮件都是通过GMail的SMTP服务器进行的.
  • 执行邮件的实际应用程序是PHPMailer.

随着用户群的增长,这种设置可能还不够.我的问题是:

  1. 我应该使用本地SMTP服务器吗?
  2. 我应该在本地计算机上使用邮件二进制文件吗?在这种情况下,我可能会完全跳过队列?
  3. 是否有可接受的方式来做到这一点?

谢谢!

Alf*_*red 10

Google App Engine

我会在谷歌应用引擎(python)中写这个,因为:

  • 它很好地扩展.
  • 它有一个很好的电子邮件api.
  • 它有一个具有良好api的任务队列来访问它.
  • 因为python是一种非常好的语言.
  • 它(相对)便宜.

PHP

如果我在PHP中实现它我会

  • 找到一个好的SMTP服务器,它允许您发送这一批邮件,因为Gmail不允许您发送此类邮件.我相信这会花费你一些钱.
  • 找到一个像样的PHP电子邮件库,像你说的那样用PHPMailer发送消息.
  • 使用像beanstalkd这样的消息队列将电子邮件放入队列并异步发送电子邮件.首先,因为这样用户将有更快的页面加载.其次是像beanstalkd这样的消息队列,你可以调节发送速度更快,这可以防止你的电脑工作过载.您需要具有对服务器的ssh访问权限才能编译(安装)beanstalkd.你可以在beanstalkd找到beanstalkd
  • 您还需要ssh访问权限才能在后台运行PHP脚本,该脚本将处理消息队列.你可以在php beanstalkd-client上找到一个beanstalkd-client

来自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);
Run Code Online (Sandbox Code Playgroud)

您必须使用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);
}
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,PHP和谷歌应用程序引擎都可以,但我会选择应用程序引擎,因为它更容易实现.


Nic*_*las 6

电子邮件数量为每天10.000的"高",我不会依赖GMail(或任何其他)SMTP.并不是他们无法处理它,显然他们可以处理更多.但他们可能不想这样做.

拥有本地SMTP服务器是IMO的最佳选择:

  • 它很容易设置(只是不要让人们在没有强大的认证方案的情况下使用它)
  • 大多数现代MTA都能很好地处理队列
  • 您无需处理GMail(或其他人)因某些配额原因决定在某一天阻止您的帐户