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

Spring JavaMailSender发送带点前缀的Gmail时出现认证失败如何解决?

问题描述

我在发送邮件时遇到异常:当收件人为example.ca@gmail.com这类@符号前缀包含.的邮箱时发送失败,但example@gmail.com这类无前缀点的邮箱可正常发送成功。
我使用Spring工具类和smtp.gmail.com配置进行邮件发送,相关实现代码如下:

// Prepare message using a Spring helper
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
    MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name());
    message.setTo(to);
    message.setFrom(jHipsterProperties.getMail().getFrom());
    message.setSubject(subject);
    message.setText(content, isHtml);
    javaMailSender.send(mimeMessage);
    log.debug("Sent email to User '{}'", to);
} catch (MailException | MessagingException e) {
    log.warn("Email could not be sent to user '{}'", to, e);
}

错误日志如下:

2021-08-31T04:06:27.416873+00:00 app[web.1]: 2021-08-31 04:06:27.416  WARN 4 --- [ travoxi-task-1] com.travoxi.service.MailService          : Email could not be sent to user 'example.ca@gmail.com'
2021-08-31T04:06:27.416890+00:00 app[web.1]:
2021-08-31T04:06:27.416893+00:00 app[web.1]: org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv
2021-08-31T04:06:27.416894+00:00 app[web.1]: 534-5.7.14 qNoy6Lu4AF50xBC1hVOvMq5I5WERrCjcVtqcfyg5diaafRcCIxfAL0CTgx5Mf9FPT3o1z
2021-08-31T04:06:27.416894+00:00 app[web.1]: 534-5.7.14 ouQgv4Ywttz25NL7CwTx7It0n9Hycl4RsHvptxU48jLZLiH4amfxH1YBgFzKWnbW>
2021-08-31T04:06:27.416895+00:00 app[web.1]: 534-5.7.14 Please log in via your web browser and then try again.
2021-08-31T04:06:27.416896+00:00 app[web.1]: 534-5.7.14  Learn more at
2021-08-31T04:06:27.416896+00:00 app[web.1]: 534 5.7.14  https://support.google.com/mail/answer/78754 a185sm12790018qkg.128 - gsmtp
2021-08-31T04:06:27.416896+00:00 app[web.1]:
2021-08-31T04:06:27.416897+00:00 app[web.1]: at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:440)
2021-08-31T04:06:27.416897+00:00 app[web.1]: at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361)
2021-08-31T04:06:27.416897+00:00 app[web.1]: at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:356)
解决方案

首先要明确:这个报错和收件人邮箱前缀是否带点没有直接关联。Gmail本身对邮箱前缀的点是做忽略处理的,example.ca@gmail.com和exampleca@gmail.com会被识别为同一个邮箱,不会因为前缀带点就拒绝投递。你观察到的差异只是巧合,大概率是测试带点邮箱时刚好触发了Gmail的SMTP认证拦截。

错误日志里的534报错是典型的Gmail SMTP认证失败,可按以下步骤排查修复:

  • 替换发件邮箱的认证方式:Gmail已经不再支持普通账号密码直接登录SMTP服务,你需要先为发件用的Gmail账号开启两步验证,之后生成专属的应用专用密码,把配置文件里的邮箱登录密码替换为这个应用专用密码即可。
  • 解除登录拦截:你可以先通过浏览器登录发件用的Gmail账号,进入账号安全页,找到最近的异常登录拦截记录,确认是你自己的操作后放行,之后再重试发送邮件。
  • 补充SMTP配置参数:可以在JavaMailSender的配置中添加以下参数,降低被识别为异常请求的概率:
Properties mailProps = javaMailSender.getJavaMailProperties();
mailProps.put("mail.smtp.auth", "true");
mailProps.put("mail.smtp.starttls.enable", "true");
mailProps.put("mail.smtp.ssl.trust", "smtp.gmail.com");

按照以上步骤调整后,无论收件人邮箱前缀是否带点,都可以正常发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:36:03