使用MS Exchange SMTP服务器发送邮件的时间太长

时间:2015-02-10 15:28:15

标签: java smtp javamail exchange-server office365

大家好,感谢您的帮助

我使用javamail发送邮件throhght 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(....)。

关于可能发生什么以及如何减少这个时间间隔的任何线索?

P.S。我尝试使用没有参数的t.connect(),系统技术说这条指令使用来自操作系统的SMTP传输协议而不使用Office365服务器传输协议

感谢

2 个答案:

答案 0 :(得分:0)

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

如果延迟是在连接呼叫上,则可能是:

  1. 您的名称服务查找服务器主机名的IP地址的速度很慢。
  2. SSL协商很慢,可能是由于客户端或服务器上的证书管理。
  3. 服务器对您进行身份验证很慢。
  4. 您可以通过查看InetAddress查找服务器主机名所需的时间来测试#1。

    您可以通过查看SSLSocket与服务器建立连接所需的时间来测试#2。

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

答案 1 :(得分:0)

非常感谢您的回答。

此连接(...)呼叫的延迟

如果我打电话

t.connet(hostname, username, password)

连接需要40-60秒

如果我打电话

t.connect()  // without parameters

连接需要200毫秒(我想它会从操作系统连接到/使用传输协议)

在我的环境中,我的应用程序安装在IBM Websphere服务器中,并且从该服务器尝试连接到Office365出站服务器(smtp.office365.com)。

这种延迟是否可能是由彼此通信的那两台服务器引起的?

感谢您的帮助