如何分两步让 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
当我进入 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