要求:
- 只允许 1 个与邮件服务器的连接(来自我的客户的限制) -发送邮件后不要关闭连接
,通过现有连接重新发送邮件(更好的性能,因为每个邮件都不需要 transport.connect())
- 发送该连接上的所有邮件
- 如果连接失败,请重新连接,发送邮件
- Java 1.6
我的代码运行良好,但有时我得到javax.mail.MessagingException
错误代码250: Got bad greeting from SMTP host
。嵌套异常是:java.net.SocketException: Socket closed
这是我的客户端代码,该行已标记,引发异常:
// the mail service is a singleton and has one property to store the transport
// object that gets initialized when the singleton instance gets created:
private Transport transport = null;
// props, authU, authP and msg are all passed as a parameter to the sending method:
if (transport == null) {
Session session = Session.getInstance(props, null);
transport = session.getTransport("smtp");
}
if(!transport.isConnected()) {
transport.connect(authU, authP); // <<<<< This line throws the exception !
}
transport.sendMessage(msg, msg.getAllRecipients());
显然transport.isConnected()
没有检测到连接,但是 connection() 没有重新打开或重新创建套接字。我的假设是它会为我做所有必要的事情。
是否有适当的客户端解决方案来确保不会引发异常?一种解决方法是捕获异常并重新发送邮件,但我不喜欢解决方法......