【问题标题】:Too much time to send mail with MS exchange SMTP server使用 MS Exchange SMTP 服务器发送邮件的时间过长
【发布时间】:2015-04-10 16:59:27
【问题描述】:

大家好,感谢您的帮助

我使用 javamail 通过 office365 SMTP 服务器 (smtp.office365.com) 发送邮件,但由于某种原因,它大约需要 60-80 秒才能发送邮件。

stringaHost = "mail.smtp.host";
stringaUser = "mail.smtp.user";

Security.setProperty("ssl.SocketFactory.provider","com.ibm.jsse2.SSLSocketFactoryImpl");
 Security.setProperty("ssl.ServerSocketFactory.provider","com.ibm.jsse2.SSLServerSocketFactoryImpl");

InitialContext initialContext = null;
initialContext = new InitialContext();

session = (Session)initialContext.lookup(nomeJndi);

session.getProperties().put("mail.smtp.auth", "true");
session.getProperties().put("mail.smtp.socketFactory.port", 465);
            session.getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

MimeMessage MsgEmail = new MimeMessage( session );
com.sun.mail.smtp.SMTPTransport t    =(com.sun.mail.smtp.SMTPTransport)session.getTransport("smtp");      

t.setStartTLS(true);
t.connect( smtp.office365.com,myUser,myPassword);
t.sendMessage( MsgEmail, MsgEmail.getAllRecipients());
t.close();

java 邮件花费超过 60 秒来评估指令:t.connect(....)。

关于可能发生什么以及如何缩短此时间间隔的任何线索?

附:我尝试使用不带参数的 t.connect(),系统技术表明该指令使用操作系统的 SMTP 传输协议,而不使用 Office365 服务器传输协议

谢谢

【问题讨论】:

    标签: java smtp jakarta-mail exchange-server office365


    【解决方案1】:

    首先,你shouldn't need all those socket factory properties

    如果延迟是在连接调用上,则可能是:

    1. 您的名称服务在查找服务器主机名的 IP 地址时速度很慢。
    2. SSL 协商速度很慢,可能是因为客户端或服务器上的证书管理。
    3. 服务器对您进行身份验证的速度很慢。

    您可以通过查看 InetAddress 为您的服务器查找主机名需要多长时间来测试 #1。

    您可以通过查看 SSLSocket 连接到服务器需要多长时间来测试 #2。

    您可以通过实时查看 JavaMail 调试输出以查看延迟在哪里,或从 JavaMail 获取带时间戳的日志消息来测试 #3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2011-10-25
      • 2011-02-07
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多