以下是我用来创建会话以发送电子邮件的代码:
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: *****
我尝试从不同的email发送电子邮件地址=“xyz@gmail.com” - >这次它无法发送和日志打印输出为:
1. emailFromAddress: xyz@gmail.com --> WHICH IS CORRECT
2. emailFromAddress: abc@yahoo.com pass: ***** --> WHICH STILL REFER TO THE OLD ACCOUNT
是否有会话验证器的缓存?
答案 0 :(得分:0)
某种缓存:您在示例中创建了Authenticator
一次,并将其设置为默认会话。由于该对象永远存在(或者至少在JVM终止之前),因此在每次调用时它都会以相同的方式运行。
也许您可以使用Authenticator
中的getDefaultUserName()
来提供用户名?
另一个选项可能是为您发送的每封邮件重新配置新的Authenticator
。因此,您可以在每次尝试时提供正确的用户名。
答案 1 :(得分:0)
作为java-doc:
getDefaultInstance
获取默认的Session对象。如果尚未设置默认值,则会创建一个新的Session对象并将其安装为默认值。
getInstance
获取一个新的Session对象。
因此,无论是否已存在,都会创建一个新的会话对象。
那么诀窍是改变为getInstance()
。