You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot发送邮件遇Local address含空白/控制字符错误求助

解决Spring Boot发送邮件时的jakarta.mail.internet.AddressException: Local address contains control or whitespace问题

我之前在项目里也碰到过一模一样的报错,结合你已经排查过的点,给你几个针对性的排查和解决方向:

  • 检查发件人地址的显示名称(Display Name):
    很多时候我们会给发件人设置显示名称,比如new InternetAddress("sender@xxx.com", "系统通知 "),如果名称里带了不可见的空白字符(比如全角空格、制表符、末尾的空格),或者复制粘贴时带了换行符,就会触发这个异常。你可以先尝试去掉显示名称,直接用纯邮箱地址构造发件人,比如helper.setFrom("sender@xxx.com"),看看能不能正常发送。

  • 排查配置文件里的默认发件人:
    如果你在application.properties/application.yml里配置了spring.mail.username或者在EmailConfig里设置了JavaMailSenderImpl.setDefaultFrom(),一定要检查这些配置值有没有隐藏的空白。有时候编辑器会在末尾自动加空格,或者复制粘贴的内容带了不可见字符,建议手动重新输入一遍邮箱地址,不要用复制粘贴。

  • 打印并检查所有收件/抄送/密送地址:
    哪怕你确认了地址没问题,也建议在代码里加日志输出实际要发送的地址列表,比如:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    private static final Logger log = LoggerFactory.getLogger(EmailServiceImpl.class);
    
    // 在send方法前添加日志
    log.info("待发送的收件人:{}", Arrays.toString(message.getRecipients(Message.RecipientType.TO)));
    log.info("待发送的抄送人:{}", Arrays.toString(message.getRecipients(Message.RecipientType.CC)));
    

    这样能直观看到有没有地址带了异常字符,比如某个地址是"user@xxx.com "(末尾有空格),肉眼可能看不到,但日志会显示出来。

  • 构造最小测试用例排查:
    在EmailServiceImpl里临时写一个最小的测试方法,绕开你原来的业务逻辑,直接构造最简单的邮件发送:

    @Override
    public void sendTestEmail() {
        try {
            MimeMessage message = emailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("你的发件邮箱@gmail.com");
            helper.setTo("测试收件邮箱@xxx.com");
            helper.setSubject("测试邮件");
            helper.setText("这是一封测试邮件");
            emailSender.send(message);
            log.info("测试邮件发送成功");
        } catch (MessagingException e) {
            log.error("测试邮件发送失败", e);
        }
    }
    

    如果这个测试方法能成功,说明问题出在你原来构造邮件的逻辑里,比如某个业务参数不小心被拼接到地址里,引入了异常字符。

  • 检查Jakarta Mail依赖兼容性:
    如果你的Spring Boot版本是3.x+,用的是Jakarta Mail而不是旧的Java Mail,要确保依赖没有冲突。检查你的pom.xml(或build.gradle),确保只有Spring Boot Starter Mail提供的Jakarta Mail依赖,不要额外引入javax.mail相关的依赖,避免类加载异常导致的地址解析错误。

内容的提问来源于stack exchange,提问作者thwang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:21:00