在Java Web应用程序中使用gmail作为SMTP服务器很慢

时间:2010-04-13 12:33:30

标签: smtp gmail performance javamail

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

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

我正在使用spring的JavaMailSender类,其中包含以下设置:

email.host = smtp.gmail.com

email.username=myaccount@gmail.com email.password =输入mypassword email.port = 465 mail.smtp.auth.required =真

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

如果你知道我如何能够自己诊断问题,那也很好。)

3 个答案:

答案 0 :(得分:4)

可能是gmail使用此延迟来阻止垃圾邮件发送者从“外部”使用他们的SMTP服务器:如果从实际的Webmail客户端调用SMTP,则不会使用此延迟。 为了测试这一点,您可以打开到端口25的telnet会话并执行手动SMTP会话 (在网上搜索SMTP HELO的例子)

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

这是关于如何设置postfix使gmail成为中继的exemple

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