2010-04-13 85 views
7

我想知道是否有人能够向我解释为什么每次我的Java Web应用程序使用Gmail的SMTP服务器发送电子邮件需要将近30秒?请参阅以下时间戳:在Java Web应用程序中将gmail用作SMTP服务器很慢

13/04/2010-22:24:27:281调试test.service.impl.SynchronousEmailService - 发送邮件之前。 13/04/2010-22:24:52:625 DEBUG test.service.impl.SynchronousEmailService - 发送邮件后。

我使用Spring的JavaMailSender类以下设置:

email.host = smtp.gmail.com

[email protected] email.password =输入mypassword 电子邮件.port = 465 mail.smtp.auth.required = true

请注意,邮件正在发送,我收到它很好,只是这种延迟导致应用程序用户的体验很慢。

如果你知道我怎么能诊断问题自己,将是一件好事:)

+0

此讨论可能有关:http://groups.google.com/group/Gmail-Help-POP-and-IMAP-en/browse_thread/thread/575e3f06894ab8b9/97d753671e733c41?lnk=gst&q=slow – Andre 2010-12-26 00:45:10

回答

4

这可能是Gmail使用这种延迟防止垃圾邮件制造者利用他们的SMTP服务器从“外部”:如果SMTP从实际的webmail客户端调用它不会使用这个延迟。 为了测试这个,你可以打开一个telnet会话到端口25,并执行一个手动SMTP会话 (在网上搜索SMTP HELO的例子)

2

GMail使用SSL进行连接。要正确验证SSL证书,需要一定的时间。具体时间取决于证书链的复杂性以及CRL和OCSP检查的使用和可访问性。 Java很可能会检查提供的证书的OCSP,这可能会很慢。

尝试在不同系统(最好在其他子网)上运行您的应用程序以排除防火墙的影响。也许某些通信部分(SMTP本身或CRL检索或OCSP检查)会被防火墙放慢。

0

根据您的操作系统,您应该有一个适当的邮件系统,负责实际在您的网络外发送邮件。

例如,Postfix可以很好地完成这项工作。 Postfix的配置将在另一个线程上,但通常Postfix会接受来自您局域网的邮件(接受为您的局域网的中继),并将邮件传输到Gmail。

这是一个exemple至于如何设置后缀gmail作为中继。

通过邮件服务来管理Gmail邮件的转发,可以让您的Java应用程序几乎即时释放(Postfix吸收邮件并将其存储在队列中并将邮件转发给Gmail本身)。

+1

为什么-1 ?拥有合适的邮件服务器对于处理邮件流量很常见,并且可以解决发送操作的延迟问题。 – 2010-12-27 00:08:10

相关问题