admin 管理员组

文章数量: 887007

javaMail 发送邮件遇到的奇葩问题Invalid Addresses

一个发邮件的服务的功能:

mail.smtp.auth=true

这个配置 设置为true时,就能正常发送

设置为false时,就报错

org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses;

nested exception is:

也是很神奇的一件事

设置true时:(需要进行用户名授权码验证),测试邮件发送时报错。

报错的原因可能是:

  • 用户名不正确
  • 授权码不正确

JavaMailSenderImpl sender=new JavaMailSenderImpl();
sender.setPassword("") //该密码是授权码,而不是邮箱的登陆密码


启用授权码,避免密码泄漏造成邮箱安全隐患,使用授权码是可以访问邮箱的部分功能(发邮件)。使用授权码是无法登陆邮箱的.

设置false时:

其实如果设置 mail.smtp.auth为false,但是如果用户名和密码都不为空,也可能会进行校验的。
因为正是和服务器连接之前,会收集服务器的扩展参数。

如果服务器支持校验而且也设置了用户名和密码,即便mail.smtp.auth为false,也会进行验证。

这里后面有机会研究源码再补充一下,先欠着留个坑待填!!!

测试类先附上

@Testpublic void test1() throws Exception {MimeMessage message = this.javaMailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");helper.setFrom(this.mailSender);helper.setTo("1751607968@qq");//helper.setSubject(String.format("%s【%s】", "订单类型", LocalDate.now().minusDays(1).format(DateTimeFormatter.ISO_DATE)));helper.setText("测试邮件");} catch (MessagingException e) {//log.error("组装异常对账订单信息邮件时失败!", e);}try {this.javaMailSender.send(message);} catch (MailSendException se) {//log.error("组装异常对账订单信息邮件时失败!", e);Exception[] messageExceptions = se.getMessageExceptions();SendFailedException sendFail;try {sendFail = (SendFailedException) messageExceptions[0];} catch (ClassCastException e) {//log.error("class cast exception:[{}]", e.getMessage());return;}//log.error("send mail eerror,the invalid mail address:{}", sendFail.getInvalidAddresses());Address[] address = sendFail.getValidUnsentAddresses();if (null == address) {return;}String[] validMails = new String[address.length];for (int i = 0; i < address.length; i++) {validMails[i] = String.valueOf(address[i]);}}}

本文标签: javaMail 发送邮件遇到的奇葩问题Invalid Addresses