Java 邮件 API 凭据验证

Java Mail API credentials verification

问题: 在使用 Java 邮件 [=48] 时,是否有任何 其他 方法可以在发送电子邮件之前验证凭据=]?


简介:

我的目标是将发送电子邮件分为两个步骤:

  1. 登录(如果用户名或密码不匹配,用户将收到相应的消息)

  2. 发送电子邮件

目前我正在通过这段代码实现它:

...
// no Authenticator implementation as a parameter 
Session session = Session.getInstance(Properties props); 
Transport transport = session.getTransport("smtp");

transport.connect(username, password);

transport.sendMessage(Message msg, Address[] addresses);
...

结论: 我的工作做得很好,但我很好奇是否还有其他方法可以实现相同的目标?

您的代码中已经有了答案。 connect 方法使用您的用户名和密码登录,如果失败则抛出异常,然后 sendMessage 消息发送消息。真的不明显吗?

发送电子邮件前验证凭据的另一种方法

这种方法比我的第一种方法更方便,原因有二:

  • 我们不需要让 Transport 的实例保持活动状态
  • 要发送电子邮件,我们可以简单地使用 Transport 的静态方法 send(Message msg),我们之前无法使用它

这次我们需要在getInstance()方法中传递Authenticator

Session session = Session.getInstance(props, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(“username”, “password”);
    }
}

/*
 * no need to pass protocol to getTransport()
 * no need to pass username and password to connect() 
 * if credentials were incorrect, you would get a corresponding error
 */
session.getTransport().connect();



// no need to use instance, we simply use static method
Transport.send(message);