发送前JavaMail密码验证

时间:2014-08-26 05:17:48

标签: java authentication javamail

如何捕获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)之类的语句时会出现错误。但我想检查身份验证是否成功 - 实际上并不是发送消息。 谢谢!

2 个答案:

答案 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
}