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

本文探讨了邮件服务中mail.smtp.auth配置为true和false时的不同行为,着重于授权码验证的设置对发送邮件的影响,以及出现错误时可能的原因和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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,也会进行验证。

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

测试类先附上

@Test
    public 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.com");
            //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]);
            }
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值