Wildfly Mail-Session始终使用localhost

时间:2014-06-07 12:08:09

标签: java sockets javamail java-8 wildfly-8

我正在尝试使用Gmail在Wildfly 8.1上设置一些简单的邮件服务(用于测试) 出于某种原因,每次我传输邮件时,Wildfly都会尝试连接到localhost而不是指定的outbound-socket

错误:

13:22:34,164 ERROR [stderr] (default task-22) com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
13:22:34,164 ERROR [stderr] (default task-22)   nested exception is:
13:22:34,165 ERROR [stderr] (default task-22)   java.net.ConnectException: Connection refused: connect
13:22:34,165 ERROR [stderr] (default task-22)   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1984)

standalone.xml

...
<mail-session name="java:jboss/mail/gmail" debug="true" jndi-name="java:jboss/mail/gmail">
    <smtp-server outbound-socket-binding-ref="mail-smtp" ssl="true" username="user@gmail.com" password="pass"/>
</mail-session>
...
<outbound-socket-binding name="mail-smtp">
    <remote-destination host="smtp.gmail.com" port="465"/>
</outbound-socket-binding>

然后我尝试发送邮件:

@Stateless
public class SendMail {

@Resource(mappedName = "java:jboss/mail/gmail")
private Session mailSession;

public String send() {
    MimeMessage m = new MimeMessage(mailSession);
    try {
        m.setRecipients(Message.RecipientType.TO, "test@mail.com");
        m.setContent("Test from Wildfly","text/plain");
        Transport.send(m);//throws exception
    } catch (MessagingException e) {
        e.printStackTrace();
    }
...

我试过“name”&amp; lookup注释中的“@Resource”,但它只是希望连接到localhost,而outbound-socket甚至没有{{1}}。

我错过了什么?

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但似乎WildFly在应用新的Java Mail设置后只需要重新加载。尝试重新启动WildFly,它应该使用您的新设置。

答案 1 :(得分:1)

如果重新加载不起作用。

替换行

Transport.send(m);

使用:

Transport transport = m.getTransport("smtp");
if (!transport.isConnected())
   transport.connect();
transport.sendMessage(m, m.getAllRecipients());
transport.close();

希望这能帮助你,因为它帮助了我。

答案 2 :(得分:0)

您使用了错误的端口。它应该是端口465或587.您仍在使用端口25(来自错误消息)

答案 3 :(得分:0)

只是添加我的经验,因为我刚遇到同样的问题: 重新启动的原因是因为您的Session属性为null,如果您正在动态修改它,则需要重新启动服务器以重新加载standalone.xml配置文件。

在我的情况下,我使用的是使用final属性的测试类,这使得资源注入无用,只需将其删除即可解决。

顺便说一下,当您使用无状态EJB时,您可能需要考虑在发送电子邮件时使用异步表示法。 :)