我正在尝试使用javax.mail发送邮件。这是我的代码:
Properties props = new Properties();
props.setProperty("mail.smtp.host", host);
props.setProperty("mail.smtp.port", port);
props.setProperty("mail.user", user);
props.setProperty("mail.password", password);
Session session = Session.getDefaultInstance(props);
但是我收到了这个错误:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.wrong.server.com, port: 25;
有趣的是,“smtp.wrong.server.com”并不是我作为主持人传递的价值。
就像Session.getDefaultInstance(props)正在使用错误的主机名返回已创建的会话。
我的EAR中没有任何其他地方使用javax.mail(至少不在我的代码中,可能在第三方依赖内?)。
此行为仅在PRO环境中发生。在DEV和TEST环境中部署的相同EAR工作正常。
任何帮助将不胜感激
答案 0 :(得分:1)
问题在于Session.getDefaultInstance。我应该使用Session.getInstance
来自javadoc:
<强> getDefaultInstance 强>
(...)默认会话可能对同一Java虚拟机中执行的所有代码可用(...)后续调用返回第一次调用创建的Session对象,并忽略传递的Properties对象。每次调用方法时,使用getInstance方法获取新的Session对象。
答案 1 :(得分:0)
它接缝你没有使用正确的钥匙为您的proerties。请参阅javax.mail.Session
的Javadoc预计客户提供属性的值 列在JavaMail规范的附录A中(特别是 mail.store.protocol,mail.transport.protocol,mail.host,mail.user, 和mail.from)因为默认值不太可能在所有情况下都有效。