2010-09-08 73 views
3

我想從Grails應用程序發送郵件,但沒有任何成功。Grails Mail插件不工作

我使用Gmail和其他SMTP服務器(不使用SSL),但是出現同樣的錯誤:

 
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?; message exceptions (1) are: 
Failed message 1: javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

我使用Config.groovy中(例如爲gmail):

 
grails.mail.host = "smtp.gmail.com" 
grails.mail.from = "[email protected]" 
grails.mail.port = "465" 
grails.mail.ssl = "on" 
grails.mail.username = "[email protected]" 
grails.mail.password = "xxx" 
grails.mail.props = ["mail.smtp.auth": "true", 
     "mail.smtp.socketFactory.port": "465", 
     "mail.smtp.socketFactory.class": "javax.net.ssl.SSLSocketFactory", 
     "mail.smtp.socketFactory.fallback": "false", 
     "mail.smtp.starttls.enable": "true", 
     "mail.debug": "true"] 

編輯:我做了一個簡單的應用程序,只有郵件插件和控制器和Javid Jamae發佈的配置工作(第三個答案,我也認爲其他應該工作)。

但即使我只是複製粘貼相同的配置和相同的發送郵件代碼,在我的主項目它仍然給我同樣的例外!我認爲這可能是由Nimble插件引起的(Mail插件是由它安裝的)。 我的配置是:
Grails的版本:1.3.4
Groovy的 版本:1.7.4
JVM版本:1.6.0_21
jQuery的 - 1.4.2.5
郵件 - 0.9
四郎 - 1.0.1
靈活 - 0.4快照

最後編輯: 我解決了這個問題:看來,我有靈活的插件使用相同的設置也,在NimbleConfig.groovy - >郵件{...(必須有「from = ...」)}。
愚蠢的問題,但在它上面花了很多時間。

回答

4

我沒有使用SSL和我有以下我的Config.groovy(不是根據環境部)的底部定義:

grails { 
    mail { 
    host = "smtp.gmail.com" 
    port = 465 
    username = "[email protected]" 
    password = "xxx" 
    props = ["mail.smtp.auth":"true",      
       "mail.smtp.socketFactory.port":"465", 
       "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory", 
       "mail.smtp.socketFactory.fallback":"false"] 
    } 
} 

我使用:

app.grails.version=1.2.1 
plugins.mail=0.9 

這適用於我。

+0

我正在關閉此主題。我沒有找到解決方案,但我發現問題太老了,沒有人回答。 – cripox 2010-09-11 11:00:13

+0

這適用於我。 – 2011-04-17 15:56:52

+0

這不適合我。我得到這個錯誤 - '無法找到有效的證書路徑到請求的目標'。請檢查我的問題[這裏](http://stackoverflow.com/questions/17547949/grails-send-mail-is-not-working).. – 2013-07-15 04:53:57

1

我沒有這條線在我的配置

"mail.smtp.starttls.enable": "true" 

和我的連接工作

還端口不應該在報價

grails.mail.port = 465 
+0

仍然是相同的例外。 – cripox 2010-09-08 03:08:08

+0

我也面臨同樣的問題。還沒有成功。看到我的問題[這裏](http://stackoverflow.com/questions/17547949/grails-send-mail-is-not-working) – 2013-07-15 04:55:36

2

已啓用SSL:

grails.mail.ssl =「on」

,並得到例外

javax.net.ssl.SSLException:無法識別的SSL消息,純文本連接?

所以禁用SSL(我的配置):

host = "smtp.gmail.com" 
port = 465 
username = "[email protected]" 
password = "password" 
javaMailProperties = ['mail.smtp.auth': 'true', 
     'mail.smtp.socketFactory.port': '465', 
     'mail.smtp.socketFactory.class': 'javax.net.ssl.SSLSocketFactory', 
     'mail.smtp.socketFactory.fallback': 'false'] 

無論如何,如果要啓用SSL - 嘗試端口。

也嘗試設置

mail.smtp.starttls。要求:「真」

因爲如果服務器不支持安全連接或客戶不接受服務器的證書,安全連接將無法啓動,你會得到你的異常。 但是,在設置starttls.required = true並且安全連接不可能的情況下,整個連接將失敗,因此您會收到適當的異常消息。

P.S.請注意,SSL和TLS - 是不同的協議。

+0

嘗試你所說的之後也有同樣的異常。我沒有嘗試過端口587,並沒有使用ssl =「on」,然後在這裏發佈在stackoverflow上。有些東西是非常錯誤的,我很好奇以前是否有其他人有過這個問題。 – cripox 2010-09-08 11:06:38

+0

@cripox您是否按照我的建議嘗試從您的端口​​中刪除引號?我正在運行一個應用程序使用下面的配置,它工作正常 – 2010-09-08 13:22:08

+0

不幸的是仍然不工作 - 嘗試從家用電腦,也部署在一個VPS – cripox 2010-09-08 14:14:43

0

我遇到了類似的問題,所以我會分享我的經驗。當使用Nimble插件(使用Mail插件作爲依賴項)時,Nimble在grails-app/conf/NimbleConfig.groovy中定義自己的郵件設置。

NimbleConfig.groovy的設置將出現覆蓋那些集Config.groovy(大概是因爲NimbleConfigConfig之後執行)。

這裏的解決方案是有條件的:

  • 如果您使用靈活的,在grails-app/conf/NimbleConfig.groovy設置郵件的屬性;你並不需要將它們設置在grails-app/conf/Config.groovy

  • 如果你不使用敏捷,然後只要按照配置郵件插件指令(或使用Javid詹美回教堂的答案)

這似乎是OP在他/她的編輯中暗示的內容,但我只是認爲我會根據對發生的事情的理解來確認編輯內容。

更新:

對於一個參考,這裏有NimbleConfig.groovy設置爲我工作:

nimble { 
    ... 
    messaging { 
     ... 
     mail { 
      host = 'smtp.gmail.com' 
      port = 465 
      username = '[email protected]' 
      password = '...' 
      props = [ 
       'mail.smtp.auth': 'true', 
       'mail.smtp.socketFactory.port': '465', 
       'mail.smtp.socketFactory.class': 'javax.net.ssl.SSLSocketFactory', 
       'mail.smtp.socketFactory.fallback': 'false' 
      ] 
     } 
    } 
} 
+0

感謝您的回答。我發現自己做了很多調整,但最終我放棄了使用Nimble。這個插件非常棒,但我仍然因爲它而出現很多類似的錯誤(郵件只是其中之一,還有引導問題以及嘗試部署的很多問題)。所以,無論如何,因爲我想要的東西太過於矯枉過正,所以我只寫了自己的代碼。太糟糕了,因爲它是一個不錯的書面插件。 – cripox 2010-11-06 23:48:45

0

您可以通過檢查 mailService.mailSender性能在運行時驗證您的配置設置。像這樣: mailService.mailSender.properties.each {println} 它將產生主機,端口,用戶名,密碼和一些其他值。 如果你確定它們都是正確的,我會懷疑有防火牆問題。即使沒有這條線,