一個屬性未設置導致發mail不成功的鬱悶。

難得陽光燦爛的週末啊,確被javamail的一個屬性未設置,給硬生生的搶奪了。不過總算是找對了問題所在,在這裏小計一下,給自己和別人也提醒一下。

先簡介一下我的環境,grails,官方mail插件,運行於jetty(出現異常)和tomcat(很正常),jetty的異常在mac下是
[quote]java.net.SocketException: Network is unreachable
at java.net.PlainSocketImpl.socketConnect(Native Method)[/quote]
而在linux下邊卻是
[quote]java.net.NoRouteToHostException: No route to host[/quote]
看異常,可以比較明顯得出是比較底層的socket問題,一開始,簡單的定位爲ipv6的問題,但是增加了[b]java.net.preferIPv4Stack[/b]s屬性,也沒有起作用。這回沒法子了,只有根據異常的提示,去查看源代碼了(開源實在是太偉大了),發現我配置的邏輯也沒有什麼不對啊。

最後,還是打印JavaMailSenderImpl(沒錯,grails/mail是採用spring的mail機制來實現的)的屬性信息,才發現了問題,原來[b]mail.smtp.socketFactory.port[/b]竟然是465,我可沒有使用ssl的啊,不知道怎麼來的。

我的可以工作的mail的額外property屬性如下:
[list]
[*]mail.smtp.auth=true
[*]mail.smtp.socketFactory.class=javax.net.SocketFactory
[*]mail.smtp.socketFactory.port=25
[/list]
[b][size=large]結論[/size][/b]
建議將mail的幾個屬性都成對的設置,比如
[list]
[*]mail.smtp.socketFactory.class/mail.smtp.socketFactory.port
[*] ssl同理
[/list]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章