并发电子邮件上的 ZF2 未捕获异常超过了 SMTP 服务器的限制


ZF2 uncaught exception on concurrent emails exceeds limit with SMTP server

ZF2 在我尝试同时发送多封邮件时抛出未捕获的异常,使用SMTP服务器。

发送 5 封电子邮件后,它会抛出异常:

未捕获的异常:"无法从主机读取"来自 Zend''Mail''Protocol''AbstractProtocol

这是在SMTP服务器发送错误之后发生的:

此客户端的邮件提交速率已超出配置的限制

由于这是在调用析构函数时抛出的,因此我无法在我的脚本中捕获它。任何建议如何在我的脚本中捕获它。

与 Zend Framework 2 或任何其他库无关。您使用的邮件服务的消息非常清楚:您超过了速率限制

无论如何,您有多种选择;

  • 切勿在一次 while/for 循环中发送大量电子邮件,因为您没有很酷的付费电子邮件服务,该服务对您的帐户没有任何速率限制。(付费或非付费 几乎所有像您这样的服务都应用速率限制以防止滥用。这是正常的。
  • 在脚本中添加一个try {} catch() {}块,当您超过限制时,只需停止,等待一段时间,然后重试。
  • 您可以考虑编写一个 cronjob 和一个 CLI 脚本来每分钟发送 X 封电子邮件。
  • 如果您需要发送数千封电子邮件,则通过使用该队列(一次 X 封电子邮件)来实现消息队列并发送电子邮件会更好。
  • 请让您的邮件服务提供商提高限制。
  • 如果费率仍然不够,请更换您的邮件服务提供商。