您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java Mail發送郵件異常問題有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java Mail發送郵件異常問題有哪些”吧!
在使用JavaMail發送郵件時,一般需要指定一些屬性參數,是通過Session使用java.util.Properties來構造,常用的用來構造Session的屬性如下:
mail.smtp.user
SMTP的缺省用戶名。
mail.smtp.host
要連接的SMTP服務器。
mail.smtp.port
要連接的SMTP服務器的端口號,如果connect沒有指明端口號就使用它,缺省值25。
mail.smtp.auth
缺省是false,如果為true,嘗試使用AUTH命令認證用戶。
mail.transport.protocol
要裝入session的協議(smtp、pop3、imap、nntp)。
mail.smtp.connectiontimeout
Socket連接超時值,單位毫秒,缺省值不超時。
mail.smtp.timeout
Socket I/O超時值,單位毫秒,缺省值不超時。
mail.smtp.from
SMTP MAIL使用的Email地址,用來設置郵件的return地址。缺省是Message.getFrom()或InternetAddress.getLocalAddress()。注意:mail.smtp.user優先使用
mail.smtp.localhost
localhost名,缺省是InetAddress.getLocalHost().getHostName()。如果JDK和name service正確配置,一般不需設置。
mail.host
郵件交互的主機。
mail.smtp.ehlo
如果為false,那么不會嘗試使用EHLO命令登錄,缺省是true。通常EHLO命令失敗,會倒退到HELO命令。這個屬性只有在服務器沒有fail EHLO屬性或沒有實現EHLO屬性。
mail.user
登錄郵件服務器的用戶名(發送郵件時需要)。
mail.from
發件人地址(發送郵件時需要)。
1.發送郵件異常
在使用springmail發送郵件時,未指定mail.smtp.localhost,本來代碼運行正常,突然有一天,新設備的hostname發生變化,無法正常發送郵件。異常如下:
最終排查發現是hostname的問題。
解決方法一:
修改/etc/hosts文件,增加hostname與ip地址間的映射,如下,最后一行為新增:
解決方法二:
發送郵件Session屬性中增加mail.smtp.localhost的配置,如下(一般localhost是存在的)
prop.put("mail.smtp.localhost","localhost");
原因:
JavaMail發送郵件時,會提取本地hostname之后,會已ip的形式去發送郵件,但是在linux服務器下,無法解析hostname對應的本機ip地址,導致JavaMail無法調用ip發送。Postfix 收到這種郵件將拒絕發送,而產生 501 錯誤。(windows服務器可以發送,是由于采用了不netbios 協議去獲得該主機的 ip 地址,所以可以獲取到ip)
在/etc/hosts配置有問題時,也出現過以下異常,以備參考:
感謝各位的閱讀,以上就是“Java Mail發送郵件異常問題有哪些”的內容了,經過本文的學習后,相信大家對Java Mail發送郵件異常問題有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。