Java 发送SMTP的主机错误

Java 发送SMTP的主机错误,java,jakarta-mail,Java,Jakarta Mail,我正在尝试使用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); S

我正在尝试使用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.error.server.com”不是我作为主机传递的值

这就像会话。getDefaultInstance(props)返回一个已创建的会话,但主机名错误

在我的耳朵里没有其他地方可以使用javax.mail(至少在我的代码中没有,也许在第三方dependecy中?)

当然,这种行为只发生在亲环境中。部署在DEV和testenv中的同一个EAR可以正常工作


如果您使用的钥匙不正确,我们将不胜感激。有关详细信息,请参见Javadoc

客户机应该为属性提供值 在JavaMail规范的附录A中列出(特别是 mail.store.protocol、mail.transport.protocol、mail.host、mail.user、, 默认设置不太可能在所有情况下都有效


问题出在Session.getDefaultInstance上。我应该使用Session.getInstance

从javadoc:

getDefaultInstance


(…)默认会话可能对在同一Java虚拟机中执行的所有代码都可用(…)后续调用返回第一次调用创建的会话对象,并忽略传递的属性对象。每次调用该方法时,使用getInstance方法获取一个新的会话对象。

要确认加载的属性是否正确,请在分配后尝试打印它们。请参阅JavaMail常见问题解答中的。