如何分两步让 java 邮件 class 在邮件中验证我的身份

How to make the java Mail class authenticate me in a mail in two steps

当我进入 Gmail 时,它会将我重定向到一个外部页面,我必须在其中输入密码和电子邮件,然后在 Gmail 登录 window 之后我必须输入 credentials.Adding代码中描述的属性我无法让它工作。

错误是这样的:

javax.mail.MessagingException: Could not convert socket to TLS; nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path validation failed: 
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path validation failed: java.security.cert.CertPathValidatorException: 
Usage constraint TLSServer check failed: 

代码:

    public static void main(String[] args) {

        final String username = "username@gmail.com";
        final String password = "password";

        Properties prop = new Properties();
        prop.put("mail.smtp.host", "smtp.gmail.com");
        prop.put("mail.smtp.port", "587");
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.starttls.enable", "true"); //TLS

        Session session = Session.getInstance(prop,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("from@gmail.com"));
            message.setRecipients(
                    Message.RecipientType.TO,
                    InternetAddress.parse("to_username_a@gmail.com, to_username_b@yahoo.com")
            );
            message.setSubject("Testing Gmail TLS");
            message.setText("Dear Mail Crawler,"
                    + "\n\n Please do not spam my email!");

            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}

```

PKIX 路径验证失败:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:

您可能缺少某种需要测试的 TLS 连接属性。

表示以下任一情况:

  • Gmail 服务器要求您在进行 TLS 连接时拥有证书
  • 您正在使用证书,但这不是 gmail 正在寻找的证书。
  • 您正在使用证书,gmail 喜欢它但它已过期。

如果你去firefox,然后去www.gmail.com,你会看到它是https://连接,如果你在firefox中点击URL旁边的(Key Lock) ,您可以查找有关证书详细信息的更多信息。

有一整页介绍如何使用 Java

使用 gmail API

https://developers.google.com/gmail/api/quickstart/java