千家信息网

Java Mail发送邮件异常问题有哪些

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章主要讲解了"Java Mail发送邮件异常问题有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Mail发送邮件异常问题有哪些"吧
千家信息网最后更新 2024年11月25日Java Mail发送邮件异常问题有哪些

这篇文章主要讲解了"Java Mail发送邮件异常问题有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Mail发送邮件异常问题有哪些"吧!

一.常用Session属性

在使用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发送邮件异常问题有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0