【问题标题】:Using gmail as SMTP server in Java web app is slow在 Java Web 应用程序中使用 gmail 作为 SMTP 服务器很慢
【发布时间】:2011-02-07 10:32:21
【问题描述】:

我想知道是否有人可以向我解释为什么每次我的 Java 网络应用程序使用 Gmail 的 SMTP 服务器发送一封电子邮件都需要将近 30 秒?请参阅以下时间戳:

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.username=myaccount@gmail.com email.password=我的密码 电子邮件.端口=465 mail.smtp.auth.required=true

请注意,邮件正在发送,我可以正常接收,只是这种延迟导致应用程序用户体验缓慢。

如果您知道我如何自己诊断问题,那也很好:)

【问题讨论】:

标签: smtp gmail performance jakarta-mail


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      这是一个exemple,关于如何设置后缀以将 gmail 作为中继。

      拥有一个负责中继 Gmail 邮件的邮件服务可以让您的 Java 应用程序几乎立即被释放(Postfix 吸收邮件,将其存储在其队列中并将其转发到 Gmail 本身)。

      【讨论】:

      • 为什么是-1?拥有合适的邮件服务器通常可以处理邮件流量,并且可以解决发送操作的延迟问题。
      猜你喜欢
      • 2014-03-02
      • 2015-08-02
      • 2012-02-03
      • 2013-09-01
      • 2019-08-14
      • 2020-04-28
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      相关资源
      最近更新 更多