2013-03-25 121 views
0

我已經找到了相當多的配置Glassfish電子郵件的參考,但我一直無法解決我自己的問題,我希望有人可以提供幫助。Glassfish電子郵件配置與交換

我已經使用郵件主機,用戶,發件人地址和說明在Glassfish 3.12控制檯中配置了JavaMail會話。傳輸協議設置爲SMTP,並添加了mail.smtp.host(和mail.smtp.auth = false)屬性。

我用來發送郵件的代碼如下:

public class JndiMail { 
    @Resource(name = "mail/[my-email]") 
    private Session mailSession; 

    public void sendMessage() { 
     Message msg = new MimeMessage(mailSession); 
     try { 
      msg.setSubject("[app] Email Alert"); 
      msg.setRecipient(RecipientType.TO, 
      new InternetAddress("[email protected]", 
      "User name")); 
      msg.setText("Hello "); 
      Transport.send(msg); 
     } 
     catch(MessagingException me) { 
      System.out.println(me.toString()); 
     } 
     catch(UnsupportedEncodingException uee) { 
     } 
     } 
} 

每次應用程序發送的電子郵件,我有一個日誌消息說,本地主機拒絕的電子郵件。我正在嘗試使用遠程交換服務器 - 不是本地主機。我不明白爲什麼遠程電子郵件服務器沒有被訪問?我意識到這應該是相當直接的,所以我很抱歉如果我錯過了一些東西。

這些Glassfish的日誌:

[#|2013-03-26T10:00:39.334+1100|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=29;_ThreadName=Thread-2;|DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]|#] 

[#|2013-03-26T10:00:39.334+1100|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=29;_ThreadName=Thread-2;|DEBUG SMTP: useEhlo true, useAuth false|#] 

[#|2013-03-26T10:00:39.334+1100|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=29;_ThreadName=Thread-2;|DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false|#] 
+0

請發佈您是如何在Glassfish上配置郵件會話的。來自Exchange的錯誤消息究竟是什麼意思? – 2013-03-25 07:56:36

+0

我通過管理控制檯創建了一個JavaMail資源。我使用了名稱my-email(如上)。我沒有爲資源添加其他屬性 - 設置mail.smtp.host和mail.smtp.auth。調試也被打開。我目前無法從我所在的位置訪問Glassfish日誌,但是日誌消息的格式爲「本地主機無響應」 – skyman 2013-03-25 08:47:14

+0

From localhost?這是可疑的,正如你所提到的,你正試圖連接到遠程主機。您確定您在Glassfish的「郵件主機」字段中輸入了正確的值嗎?順便說一下,你檢查過你的服務器和Exchange之間的連接嗎? – 2013-03-25 10:22:08

回答

0

我曾了這一點。解決方案非常簡單。在Glassfish中配置Javamail資源時,在JNDI名稱上使用「mail /」前綴很重要。我曾假設Glassfish添加了這個。我發現解決方案通過從上面的代碼中刪除注入,並在try catch中包括JNDI查找:

try { 
    InitialContext ctx = new InitialContext(); 
Session session = (Session) ctx.lookup("mail/MyEmail"); 
Message msg = new MimeMessage(session); 
+0

它仍然適用於注射?我正在嘗試這個,但我仍然得到localhost:25 – 2013-06-14 06:25:46