2014-09-26 47 views
0

我試圖用spring發送一封簡單的郵件。用Java Mail在Spring發送郵件掛起

這是我在java配置中的郵件發送者bean定義。

@Bean 
    public JavaMailSender javaMailService() { 
     JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 
     mailSender.setSession(getMailSession()); 
     return mailSender; 
    } 

    public Session getMailSession() { 
     JndiTemplate template = new JndiTemplate(); 
     Session session = null; 
     try { 
      session = (Session) template.lookup("java:jboss/mail/Default"); 
     } catch (NamingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return session; 
    } 

我正在運行的是jboss wildfly,並且創建的bean沒有任何問題。

這是我的代碼發送電子郵件。

@Autowired 
private JavaMailSender mailSender; 

@Override 
public void sendMail(String mailTo, String subject, String content) throws MessagingException{ 
    MimeMessage message = mailSender.createMimeMessage(); 
    message.setSubject(subject); 
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo,false)); 
    mailSender.send(message); 
} 

JavaMailSender被正確注入。當我調試執行時發生到mailsender.send()方法。它開始掛起。

看來jboss中的所有配置都是正確的。我也嘗試在它自己的bean中指定郵件服務器參數。但它仍然不起作用。

我在這裏做錯了什麼?

+0

您的郵件會話是否在JBoss中正確配置? SMTP服務器是否正常運行,您是否可以從JBoss實際連接到服務器。看起來像郵件會話配置問題給我。 – 2014-09-26 08:48:13

+0

我使用Gmail郵件。我可以telnet並連接到它。這是我用的:telent smtp.gmail.com 465 – 2014-09-26 08:50:12

+0

這是我的jboss配置: <登錄名= 「username」 的密碼= 「密碼」/> \t <出站-socket-binding name =「smtp.gmail.com」> 2014-09-26 08:52:54

回答

0

按照這些說明與Spring和Gmail發送電子郵件:Email with Spring and Gmail

你完全缺少認證的一部分。並確保Gmail的SMTP服務器地址是正確的。

從上面的鏈接中獲取這些必須是配置;

<property name="host" value="smtp.gmail.com" /> 
    <property name="port" value="587" /> 
    <property name="username" value="username" /> 
    <property name="password" value="password" /> 

    <property name="javaMailProperties"> 
     <props> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">true</prop> 
      </props> 
    </property> 
0

儘管問題已經解決,但我面臨類似的問題,上述步驟和其他線程都沒有工作。我必須另外指定協議作爲SMTPS才能工作。所以這裏是我的工作代碼片段。

@Bean 
    JavaMailSender javaMailSender() { 
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 
    mailSender.setHost(props.getHost()); 
    mailSender.setPort(props.getPort()); 
    mailSender.setUsername(props.getUsername()); 
    mailSender.setPassword(props.getPassword()); 

    Properties mailProperties = new Properties(); 
    mailProperties.put("mail.smtp.auth", props.getSmtp().isAuth()); 
    mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    mailProperties.put("mail.smtp.starttls.enable", props.getSmtp().isStarttlsEnable()); 
    mailSender.setJavaMailProperties(mailProperties); 
    mailSender.setProtocol("smtps"); 

    return mailSender; 

    } 
相關問題