springboot发送邮件报AuthenticationFailedException 334异常

本文主要分析了SpringBoot在发送邮件时遇到的AuthenticationFailedException 334异常。问题源于在K8s环境中, CanonicalHostName可能导致加密错误,由于K8s服务名的前缀和后缀导致字符串长度变化,影响了NTLM加密。解决方案是通过自定义localhost和localaddress来替换CanonicalHostName,通过修改配置文件解决问题。
摘要由CSDN通过智能技术生成

一、相关配置&代码

springboot  pom文件配置,将自动导入javax.mail-1.6.2.jar

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

yaml文件配置如下:

spring:
  mail:
    # 邮件服务地址
    host: xxx
    # 端口,可不写默认
    port: xxx
    # 编码格式
    default-encoding: utf-8
    # 用户名,发送者的邮箱
    username: xxx
    # 授权码,发送者邮箱的密码/从第三方平台获取的授权码
    password: xxx
    # 其它参数
    properties:
      mail:
        smtp:
          # 如果是用 SSL 方式,需要配置如下属性,使用qq邮箱的话需要开启
          ssl:
            enable: false
            required: false
          # 邮件接收时间的限制,单位毫秒
          timeout: 10000
          # 连接时间的限制,单位毫秒
          connectiontimeout: 10000
          # 邮件发送时间的限制,单位毫秒
          writetimeout: 10000

java发送邮件代码:

@Autowired
private JavaMailSender javaMailSender;

public void sendEmail(String from, String recipient, String subject, String text)
			throws MessagingException {

	MimeMessage message = javaMailSender.createMimeMessage();
	// true表示需要创建一个multipart message
	MimeMessageHelper helper = new MimeMessageHelper(message, true);
	helper.setFrom(new InternetAddress(from));
	helper.setTo(recipient);
	helper.setSubject(subject);
	helper.setText(text, true);

	javaMailSender.send(message);
}

二、分析问题

利用java发送邮件时,在本地windows上进行测试发送邮件时没有问题,当部署到k8s服务器上之后始终报如下错误:

Caused by: javax.mail.AuthenticationFailedException: 334 TlXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWAQAAAAA=
Caused by: java.lang.ArrayIndexOutOfBoundsException: null

这里需要说明一点:上面yaml配置文件中的host配置的是我们公司企业邮箱服务器,并非163或qq的,使用163或qq邮箱目前没有发现相同的问题

网上查找后发

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值