553 Mail from must equal authorized user

本文针对JavaMail发送邮件时出现的553Mailfrommustequalauthorizeduser异常进行了详细解析,并提供了有效的解决方案,包括如何正确配置Session实例来避免此类问题。

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

解决 JavaMail异常:553 Mail from must equal authorized user


在本人工作的过程中,遇到了形形色色的问题。当时琢磨了好久才琢磨出这样的总结,贴出来供大家参考参考。以下观点仅代表本人在工作过程中的观点,望大家能够共同讨论,查漏补缺。


最近在操作JavaMail的时候发现了一个隐藏性的bug,一开始没有注意到,直到最近一次修改了配置才发现了这个问题,而这个问题就是553 Mail from must equal authorized user啦。



那么首先先贴出我原本的配置给大家看看哈.

#default
MailServerHost=smtp.qiye.163.com
MailServerPort=25
UserName=123456@163.com
Password=123456
FromAddress=123456@163.com
Subject=default mail
Product=Default

#test
MailServerHost_1=smtp.qiye.163.com
MailServerPort_1=25
UserName_1=123456@163.com
Password_1=123456
FromAddress_1=123456@163.com
Subject_1=test mail
Product_1=test

由于项目中是需要多个邮箱进行不同的操作,所以我们一开始需要在配置文件中配置不同的邮箱配置,从而读取不同的邮箱配置进行邮件的收发。
而最近由于公司的业务要求,我们就将其中的一个邮箱的配置进行了修改,具体就是将test的配置进行了修改,修改如下:

#test
MailServerHost_1=smtp.qiye.163.com
MailServerPort_1=25
UserName_1=654321@163.com
Password_1=654321
FromAddress_1=654321@163.com
Subject_1=demo mail
Product_1=demo

不难看出修改的地方是用户名、密码、主题。

通过对业务逻辑进行修改,即通过读取配置文件中不同的邮箱信息,从而达到使用不同的邮箱进行邮件的发送功能。

修改完毕后,重启项目后,运行!
通过第一个邮箱配置进行邮件的发送,发送成功。而正当我通过第二个邮箱配置进行邮件的发送的时候,程序就出错了!

这里写图片描述

看错误的log,似乎是有户名还有密码不匹配。但是检查了很多次配置,都没有问题。
在网上一找资料,原来是Session捣的乱。


我们找到我们的代码,不难发现我们在发送邮件的时候是根据邮件会话属性和密码验证器构造一个发送邮件的session

 // 根据邮件会话属性和密码验证器构造一个发送邮件的session 
Session sendMailSession = Session.getDefalutInstance(pro,authenticator); 

问题就是出在getDefaultInstance()这个方法。
getDefaultInstance()这个方法的处理方式是这样的:

1、首先会在缓存中查找是否存在着properties。
2、如果缓存中不存在,那么才会加载一个新的用户自定义的properties。
3、如果缓存中存在,那么就不会新加载一个properties,而用以前的配置。

因此,当我们具有两个不相同的配置的时候,程序在读取了第一个配置之后,则此配置会一直存在缓存中,下次无论是想要读取其他配置都会返回此默认缓存配置。

那么这时候问题就明显了,我们解决这个问题只需要将getDefaultInstance()方法改为getInstance()就可以解决啦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值