通过 google 的 SMTP 服务器发送电子邮件的最快方式?

Fastest way to send emails through google's SMTP servers?

我正在开发一个发送大量电子邮件(注册、忘记密码、交易等)的网站,目前我正在使用 PHPMailer 和 gmail 的 SMTP 发送它们。他们工作得很好,我从来没有丢失过电子邮件。

所以怎么了?

嗯,因为它必须登录到 SMTP,所以加载页面需要更长的时间。例如,当用户进行交易时,完成请求需要大约 900-1000 毫秒的时间。我认为像这样发送电子邮件是一个非常糟糕的主意。

怎么办?

我从来没有用这种方式发送邮件,所以我不知道哪个是最快的做法。

我想写一个 python 或 php cli 服务,它有一个队列,其中包含要发送的电子邮件。当必须发送电子邮件时,它会处理。

不确定这是否完美。有什么建议吗?

I believe that sending emails like this is a very bad idea.

你是对的。

Any suggestions?

发送邮件(或任何需要花费一些时间的过程)应该始终在后台完成,以便前端保持快速。

你有不同的方法来做到这一点:

  • Insert/flag 数据库中的一些行,并有一个 cron 作业定期检查是否有这样的行要处理。如果延迟不是问题,这很容易实现并且效果很好。但是,如果您需要 运行 过于频繁地执行 cron,请转到下一个解决方案。
  • 使用像 RabbitMQ 这样的第三方 queue/messaging 服务。设置时间有点长,但它是一个非常可靠和通用的架构:前端将您想要的任何任务发送到服务,服务负责排队并将它们分发给您的工作脚本。可用于发送电子邮件、调整图像大小、生成 PDF 等。任何需要时间的都可以在后台移动。

现在有另一种解决方案特别适用于电子邮件,如果您有一些系统管理技能:使用 SMTP 中继。

  • 您的前端不是直接查询 Gmail SMTP(速度慢),而是在本地发送邮件(速度快),您的本地邮件服务器(例如 Postfix)将负责将邮件转发到 Gmail 的 SMTP。