【问题标题】:The zend framework 2 send email is too slow(google smtp server )zend framework 2 发送邮件太慢(google smtp server)
【发布时间】:2013-04-25 11:33:19
【问题描述】:

我正在开发一个项目,我需要向某些用户发送通知,我正在使用带有 zend 框架 2 Zend/Mail 库的 smtp 设置。我已经在 php.ini 设置中打开了 tls 并打开了 ssl。

问题是通知太慢了,通常当 5 个或更多用户同时使用该应用程序时,我会收到超时错误。

我可以使用任何配置使这封电子邮件发送得更快吗?

如果有可以使用的配置请告诉我。

【问题讨论】:

  • 这就是你必须使用好的调试工具并追踪你的瓶颈所在的地方。
  • Sam 感谢您查看此问题,在使用电子邮件通知之前,一切正常,但发布电子邮件通知的速度太慢了。
  • 我只是想加快电子邮件通知的速度。请帮忙。
  • 如果不知道究竟是什么导致了瓶颈,这几乎是不可能的;)您必须调试才能知道什么运行缓慢!
  • 如果我评论邮件功能,它会在 1.10 秒内提交页面,取消评论邮件功能后,页面需要 6-7 秒才能提交。所以这是邮件功能,这是瓶颈;)

标签: php apache zend-framework2


【解决方案1】:

为什么不将电子邮件添加到队列并实际从不同的进程发送呢?如果邮件在提交后 1 分钟发送,我认为不会有问题。

当您等待第三方系统时,它们总是存在风险。因此,我尝试通过在单独的进程中运行这些东西来最大程度地减少对 3rd 方系统的等待

【讨论】:

【解决方案2】:

如果我必须打赌,我敢打赌您的 SMTP 服务器有很多延迟。你说你正在使用谷歌的 SMTP,我不熟悉,但这将是一个遥远的服务器(相对于你的网络上的喜欢和 SMTP 框)。最重要的是,您说您正在通过 SSL 运行 SMTP。 SSL 是一个复杂的协议,在连接建立之前会进行很多握手。这意味着您的服务器和 SMTP 服务之间的网络延迟会随着两台机器进行 SSL 握手对话而成倍增加。总的来说,这不是一个很好的设置。

某种工作队列会有所帮助。因此,您的 Web 绑定流程只是将一些工作放在某个队列上,而一些工作人员会尽力跟上。你可以在 PHP 中实现类似的东西(你可以考虑使用类似 gearman 或 beanstalkd 的东西来提供实际的队列)。

但还有另一个非常专业的选项。只需使用您本地的 sendmail(假设您使用的是 unix 类型的机器)。 Sendmail(以及各种插入式替代 MTA)维护它自己的队列。这些东西已经存在了很多年,而且非常坚固。您也可以将 MTA 配置为通过当前的 SMTP 设置传递邮件。

不同之处在于,您的 PHP 脚本不是与远程 SMTP 服务器通信,而是与本地服务通信,该服务只接收邮件、将其排队,然后几乎立即返回。它将邮件保留在队列中,直到它能够设法通过 SMTP 发送。

简单的旧本地 sendmail 将大大帮助您解决问题。如果您使用的是 Windows 服务器,我不确定您的选择是什么。至少,必须有一个可以运行的本地 SMTP 服务器,该服务器可以配置为通过 SSL 将所有邮件中继到 google。

【讨论】:

    【解决方案3】:

    我知道我在家使用的 ISP 实际上根本不允许我发送电子邮件。找出停止工作的原因是非常令人沮丧的一天。最终我找到了它,发现如果我在家,我就会收到超时错误,但如果我在办公室,它就可以正常发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2011-08-02
      • 2015-11-08
      • 2015-01-08
      • 2014-09-29
      • 2015-06-12
      • 1970-01-01
      相关资源
      最近更新 更多