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

时间:2009-11-26 17:54:22

标签: php email gmail standards

我正在考虑如何处理从我的网络应用程序发送大量电子邮件,以及是否有任何最佳做法。 StackOverflow已将此标记为“主观”,这可能在一定程度上,但我需要知道实现此系统的最成功方式,或者是否存在任何标准化方法。

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

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

目前,我目前的设置是:

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

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

  1. 我应该使用本地SMTP服务器吗?
  2. 我应该在本地计算机上使用邮件二进制文件吗?在这种情况下,我可以完全跳过队列吗?
  3. 是否有可接受的方法来执行此操作?
  4. 谢谢!

6 个答案:

答案 0 :(得分:10)

Google App Engine

我会在Google应用引擎(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 / webpage

这是您将消息发送给用户的页面。在这个页面中,您将通过编写以下内容的代码向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和谷歌应用程序引擎都可以,但我会选择应用程序引擎,因为它更容易实现。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:0)

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

如果您要发送那么多电子邮件,我建议您使用该队列,这样用户就不会坐在那里等待发送电子邮件。

答案 3 :(得分:0)

请务必小心,您的域名不会被列入垃圾邮件域列入黑名单。如果是这样,您可以预期大多数电子邮件都会被阻止,支持,销售等。这可能会非常昂贵。

您可能希望使用AWeber之类的服务。他们不仅设置了处理这些数量的电子邮件,而且可能会为您提供比您自己实施的更多指标。

答案 4 :(得分:0)

我不确定它是否会在任何地方发布,但根据我的经验,我可以告诉您,如果您一次开始发送数百封邮件,Gmail会冻结您的帐户十五分钟左右。上周发生在我身上。我认为你应该托管自己的SMTP服务器。使用mail()函数通常会将您的邮件放在某人的垃圾邮件文件夹中。

答案 5 :(得分:0)

只需在本地计算机或同一LAN上的计算机上安装Postfix,即可获得最大的访问速度。确保从外面很好地固定,并从内部快速进入。

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