2013-04-24 145 views
1

我正在一个项目,我需要发送通知给一些用户,我正在使用Zend框架2 Zend /邮件库的smtp设置。我打开tls并在php.ini设置中打开ssl。zend框架2发送电子邮件太慢(谷歌smtp服务器)

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

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

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

+0

这是一个你必须利用好的调试工具并追踪到底是什么瓶颈的地方。 – Sam 2013-04-24 06:58:41

+0

Sam感谢您在使用电子邮件通知之前查看此问题,这些事情运行良好,但发布邮件通知的方式太慢了。 – 2013-04-24 07:14:00

+0

我只是想加快电子邮件通知。 plz帮助。 – 2013-04-24 07:14:22

回答

1

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

第三方系统在等待它们时总是存在风险。因此,我尽量减少等待第三方系统通过在单独的过程中运行这些东西

+0

是有道理的,你能给我一个链接到任何博客文章,从我可以得到参考。如果你可以给我一个博客文章链接,那就太好了。 – 2013-04-24 10:11:37

+1

你可能想看看 http://stackoverflow.com/questions/8668038/in-php5-wish-to-send-email-in-different-process 或 HTTP://pear.php。 net/package/Mail_Queue – nvanesch 2013-04-24 11:11:25

0

我知道我在家使用的ISP实际上并不允许我发送电子邮件。这是一个非常令人沮丧的日子,找出停止工作的原因。最终我追踪了下来,并意识到如果我在家里,我得到超时错误,但如果我在办公室,它发送罚款。

1

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

某种工作队列会有所帮助。所以你的网络流程只是把一些东西放在某个队列中,一些工作者尽力跟上。你可以在PHP中实现类似的东西(你可以考虑像gearman或beanstalkd这样的东西来提供实际的排队)。

但还有另一个非常专业化的选项。只需使用你本地的sendmail(假设你在unix类型的盒子上)。 Sendmail(以及各种替代MTA)维护着它自己的队列。这些东西已经存在多年,并且非常稳固。您可以配置您的MTA以通过当前SMTP设置传递邮件。

不同之处在于,不是你的PHP脚本与远程SMTP服务器通话,而是与本地服务进行通信,该服务仅接收邮件,排队并在几乎没有时间的情况下返回。它将邮件保存在队列中,直到它能够通过SMTP发送邮件。

简单的老本地sendmail会让你修好很长的路要走。如果你在Windows服务器上,我不确定你的选择是什么。必须至少有一个可以运行的本地SMTP服务器,该服务器可以配置为通过SSL将所有邮件转发给谷歌。

+0

这个答案确实有助于感谢。 – 2013-04-25 11:24:03

相关问题