大家好,感谢您的帮助
我使用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服务器传输协议
感谢
答案 0 :(得分:0)
首先,你shouldn't need all those socket factory properties。
如果延迟是在连接呼叫上,则可能是:
您可以通过查看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)。
这种延迟是否可能是由彼此通信的那两台服务器引起的?
感谢您的帮助