0

我遵循了一个示例,将资源添加到我的 webapp context.xml

<Resource auth="Container" mail.smtp.host="localhost" 
    name="containeremail" type="javax.mail.Session" />

在 web.xml 我有:

<resource-ref>
<description>Container Email resource</description>
<res-ref-name>containeremail</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>

然后我使用 Javamail 发送这样的电子邮件:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");            
mailSession=(Session)envCtx.lookup("containeremail");                                             
mailSession.setDebug(true);


Transport.send(message);

这在我的开发环境中运行良好。

但是,当我在我的生产 CENTOS 框中部署时,我得到了这个异常:

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 365;

嵌套异常是:java.net.ConnectException:连接被拒绝

Postfix 已安装并在两台机器上运行。我什至尝试在 context.xml 中将端口指定为 25:

mail.smtp.port="25"

但即使这样,它仍然有上面提到端口 365 的例外 ????

关于什么是错的任何想法?

谢谢

斯普诺格

4

1 回答 1

0

在这种情况下,我不知道 Tomcat 是如何创建 javax.mail.Session 实例的,但如果它使用 Session.getDefaultInstance 而不是 Session.getInstance 你可能会得到一个带有其他人配置的 Session,这就是它使用端口 365 的原因.

您总是可以绕过 Tomcat 的资源配置并自己调用 Session.getInstance。

于 2012-11-14T18:14:15.473 回答