背景:
一般来说,应用系统都需要发送邮件,提供一个认证的邮箱帐号和密码是很常见的。但是,有的客户方是内网直连邮箱服务器的,不需要通过帐号密码认证发送邮件,这样的话,理论上将 mail.smtp.auth 属性配置为 false 就可以了。
mail.smtp.auth 是控制邮件发送是是否需要进行登录认证的:
true 表示需要身份验证
false 表示不需要身份验证
通过 JavaMailSenderImpl 的 setJavaMailProperties 方法来设置该属性。
需要的jar包:spring.jar mail.jar
JavaMailSenderImpl 的创建方式有两种:
第一种,Spring 配置方式:
<!-- Setting for mail -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<!-- 邮箱服务器 如:smtp.qq.com smtp.sina.com.cn smtp.163.com smtp.exmail.qq.com smtp.126.com 等-->
<value>mailserv.mmm.com</value>
</property>
<property name="username">
<!-- 发件人账号-->
<value>e3mchina@mmm.com</value>
</property>
<property name="javaMailProperties">
<props>
<!--是否校验用户名和密码-->
<prop key="mail.smtp.auth">false</prop>
<!--链接超时时间-->
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
第二种,直接创建对象:
javaMailSenderImpl = new JavaMailSenderImpl();
// 设置邮件配置
Properties p = new Properties();
InputStream in =
MailUtil.class.getClassLoader().getResourceAsStream("mail.properties");
p.load(in);
javaMailSenderImpl.setJavaMailProperties(p);
其中配置信息在mail.properties中
#企业邮箱服务
mail.host=mailserv.mmm.com
mail.username=*****@mmm.com
mail.defaultEncoding=utf-8
#免账户密码严重
mail.smtp.auth=false
mail.timeout=25000
#qq邮箱服务,目前有问题,port禁用
#mail.host=smtp.qq.com
#mail.transport.protocol=smtp
#mail.username=*****@qq.com
# ozidkoeinupijaee
#qq邮箱此处paasword为邮箱里面开通SMTP权限时给的16位授权码
#mail.password=gxsjkvcwzbnghdgh
#mail.smtp.auth=true
#mail.smtp.port=465
#mail.smtp.ssl.enable=true
javaMail常见问题/error:
ERROR:
- com.sun.mail.smtp.SMTPAddressFailedException: 550 #5.1.0 Address rejected.
- com.sun.mail.smtp.SMTPSenderFailedException: 553 Local user only
- Authentication failed; nested exception is javax.mail.AuthenticationFailedException
原因:
要么是你这边企业邮箱的范围问题,要么就是对方dns服务器无法解析识别你的域名而拒绝接收。
邮件发送时,虽然不需要帐号认证,但是发件箱地址必须跟 host 邮箱服务器是相同类型。比如 smtp.163.com输入的发件箱地址应该为 ××××@163.com
ERROR:
com.sun.mail.smtp.SMTPSenderFailedException: 550 5.8.2 user can not use SMTP service
原因:
这个就是发送邮件的邮箱名不可用。
ERROR:
- org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.
- AuthenticationFailedException: 535 5.7.3 Authentication unsuccessful
原因:
设置 mail.smtp.auth=false 后,同时又设置了认证邮箱帐号和密码,那么等价于 mail.smtp.auth=true 了。此时,如果认证帐号密码信息错误,則报异常。
ERROR:
Could not connect to SMTP host: xx@xxx.com, port: 25
原因:
排除配置错误的可能性, 很有可能是你的服务器的运营商将25端口封禁了!