javax验证器引用相同的电子邮件地址
以下是我用来创建发送电子邮件会话的代码:javax验证器引用相同的电子邮件地址,java,authentication,caching,jakarta-mail,Java,Authentication,Caching,Jakarta Mail,以下是我用来创建发送电子邮件会话的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable","true"); props.put("mail.smtp.EnableSSL.enable","true"); logger.trace("1. emailFromAddress: " + emailFromAddress); session = Session.getDefaultInstance(p
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.EnableSSL.enable","true");
logger.trace("1. emailFromAddress: " + emailFromAddress);
session = Session.getDefaultInstance(props,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
logger.trace("2. emailFromAddress + " pass: " + password);
return new PasswordAuthentication(emailFromAddress, password);
}
});
然后我尝试输入emailFromAddress=”abc@yahoo.com“和它的密码。
我可以验证地址并成功发送电子邮件,以及
1. emailFromAddress: abc@yahoo.com
2. emailFromAddress: abc@yahoo.com pass: *****
我尝试从不同的emailFromAddress=”发送邮件xyz@gmail.com“-->这次发送失败,日志打印输出为:
1. emailFromAddress: xyz@gmail.com --> WHICH IS CORRECT
2. emailFromAddress: abc@yahoo.com pass: ***** --> WHICH STILL REFER TO THE OLD ACCOUNT
会话验证器有缓存吗?有某种缓存:您在示例中创建了一次验证器,并将其设置为默认会话。由于该对象永远存在(或者至少直到JVM终止),因此它在每次调用时的行为都是相同的
也许您可以使用from验证器提供用户名
另一个选项可能是对您发送的每封邮件重新配置一个新的验证器。因此,您可以在每次尝试时提供正确的用户名。作为java文档:
getDefaultInstance
获取默认会话对象。如果尚未设置默认值,则会创建一个新的会话对象并作为默认值安装
getInstance
获取新的会话对象。
因此,将创建一个新的会话对象,而不管该对象是否已经存在
因此,技巧是将getInstance()更改为getInstance()
似乎是getDefaultInstance()在设置完成后返回defaultSession,而不管您的验证器是否更新。所以我改为getInstance()并解决了这个问题。