1

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

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

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

让我知道是否有一些配置可以使用。

4

3 回答 3

1

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

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

于 2013-04-24T09:54:45.370 回答
1

如果我必须打赌,我敢打赌你的 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。

于 2013-04-25T03:33:19.123 回答
0

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

于 2013-04-24T13:37:14.850 回答