【问题标题】:Java Mail API credentials verificationJava Mail API 凭证验证
【发布时间】:2018-09-26 19:34:54
【问题描述】:

问题:在使用 Java Mail API 发送电子邮件之前,是否有任何其他方法来验证凭据?


简介:

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

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

  2. 发送电子邮件

目前我正在通过这个 sn-p 代码实现它:

...
// 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);
...

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

【问题讨论】:

    标签: java session gmail jakarta-mail transport


    【解决方案1】:

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

    【讨论】:

    • 谢谢比尔,但您也可以在我的问题中找到您问题的答案。我只是询问了其他方法。
    • 我明白了,你已经接近 Java Mail API,所以如果你不介意的话,我想问你下一个问题。是否有任何选项可以在使用我的问题中提到的方法时仍然使用静态 Transport.connect() 而无需对凭据进行两次身份验证?
    • 没有。您有什么理由需要这样做吗?
    • 是的。在这种情况下,我不需要让 Transport 的实例保持活动状态并通过我的方法传递它来完成工作。但是做两次验证似乎有点过头了。顺便说一句,你刚刚回答了我的主要问题!
    【解决方案2】:

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

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

    • 我们不需要让 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);
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多