我正在尝试使用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}}。
我错过了什么?
答案 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时,您可能需要考虑在发送电子邮件时使用异步表示法。 :)