【问题标题】:Send emails instantly or put them in queue? [closed]立即发送电子邮件或将它们放入队列中? [关闭]
【发布时间】:2019-05-03 00:43:21
【问题描述】:

说明:

我们将使用MailGunSendgrid 在用PHP 编写的网络应用程序上发送电子邮件。

此应用需要发送以下电子邮件(所有 html 表单都需要输入验证码):

  • 注册后确认用户邮箱
  • 应用户请求重新发送电子邮件确认码
  • 重置密码
  • 批准对帐户的重要更改

应用程序在大多数情况下每秒将有约 50 个活跃用户。可能每分钟大约 15-20 封电子邮件...

问题:

  1. 是立即发送电子邮件更好(对于应用程序的性能和安全性)还是我们应该将它们放在数据库表队列中并稍后通过 cron-job 发送 (我真的更喜欢即时发送,但我不确定缺点)
  2. 每种方法的优缺点是什么?
  3. 如果我们必须将它们放入队列中,(AFAIK) cron-job 的最短时间是每 1 分钟一次,所以用户应该等待一分钟才能收到他们的电子邮件?

【问题讨论】:

  • 定义“更好”。否则(甚至可能仍然如此)这太宽泛和/或太基于意见了。请阅读help center 中的主题内容。
  • 你没有提到你是用什么框架,还是这个自定义写的PHP?
  • @sudo 自定义编写的 PHP(7.3 版),无框架。

标签: php email queue


【解决方案1】:

如果您加入队列,如果您正在使用的服务(例如 MailGun 或 Sendgrid)出现故障,或者您的互联网连接中断,或者您的网络硬件出现故障,您可以忽略错误并重试。如果您立即发送并且出现错误,除非您将失败的项目排队,否则不会发送这些项目。如果您对此的解决方案是将失败的项目排队,那么为什么不将它们全部排队 - 似乎是最简单的方法(这是我最常用的方法)。

您每分钟运行一次的 cron 作业程序或脚本可以发送邮件。等待 2 秒,发送更多,等待 2 秒等,循环说 29 次。所以基本上你每2秒就会收到一个发送。

以上不是猜测,我已经中断了几个小时,非基于云的邮件中继服务器停机等,但是当连接恢复时,邮件终于发送了。

排队的风险是,如果您没有正确处理错误或正确取消电子邮件排队,您可能会轰炸您的收件人。我自己没有做过,但这是我能想到的最严重的缺点。

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2022-08-13
    • 1970-01-01
    • 2012-05-23
    • 2022-01-21
    • 2011-04-14
    • 2012-08-10
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多