JavaMail发邮件

背景:

一般来说,应用系统都需要发送邮件,提供一个认证的邮箱帐号和密码是很常见的。但是,有的客户方是内网直连邮箱服务器的,不需要通过帐号密码认证发送邮件,这样的话,理论上将 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:

  1. com.sun.mail.smtp.SMTPAddressFailedException: 550 #5.1.0 Address rejected.
  2. com.sun.mail.smtp.SMTPSenderFailedException: 553 Local user only
  3. 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端口封禁了!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值