如何捕获AuthenticationFailedExceptions?
我基本上有一个登录屏幕,我从用户名和密码中的文本中获取文本。我正在使用Gmail身份验证。
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host","smtp.gmail.com");
properties.put("mail.smtp.port","587");
Session session = Session.getInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
);
如何检查身份验证是否成功?我知道在调用诸如Transport.send(message)
之类的语句时会出现错误。但我想检查身份验证是否成功 - 实际上并不是发送消息。
谢谢!
答案 0 :(得分:2)
Transport transport;
try {
transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com", username, password);
transport.close();
//Authentication success
} catch (AuthenticationException e) {
System.out.println("Authentication Exception");
//Authentication failed. Handle this here.
}
这段代码在OP的原始代码段之后,将能够验证,假定用户名和密码已定义。
如果执行了catch语句,则身份验证失败。如果没有,验证成功。
答案 1 :(得分:0)
每当您尝试使用错误的凭据发送邮件时,它都会抛出 javax.mail.AuthenticationFailedException 因此,您可以在catch块中捕获该异常以解决您的问题
请参阅文档:[http://docs.oracle.com/javaee/1.4/api/javax/mail/AuthenticationFailedException.html]
try
{
Session session = Session.getInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
);
}
catch(AuthenticationFailedException e)
{
// your action
}