JavaMail - 发送经过身份验证的oauth2 smtp邮件

时间:2016-07-14 08:18:41

标签: java oauth-2.0 smtp javamail gmail-api

我正在尝试使用JavaMail API 1.5.5通过Gmail服务器发送经过身份验证的电子邮件。

我按照javaMailAPI 1.5.5 site中的教程使用this google tool但未成功发送邮件。

这是我做的:

private static void sendEmail(String _emailBody){
    //used oauth2.py in order to retrieve the access token
    String accessToken = getAccessToken(refresh_token,username,client_id,client_secret);
    // Setup mail server
    Properties props = new Properties();
    props.put("mail.imap.ssl.enable", "true"); // required for Gmail
    props.put("mail.imap.auth.mechanisms", "XOAUTH2");
    Session session = Session.getInstance(props);
    Store store = session.getStore("imap");
    store.connect("imap.gmail.com", username, accessToken);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(username));
    msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(_email));
    msg.setSubject("some subject");
    msg.setText(_emailBody);
    Transport.send(msg);

} 

我得到了以下的执行:

com.sun.mail.util.MailConnectException
Couldn't connect to host, port: localhost, 25; timeout -1

我还尝试在属性中切换imap'名称为smtp,但在这种情况下程序停留在

store.connect("imap.gmail.com", username, accessToken);

我该如何解决?我在网上搜索了答案,但没有找到答案。

修改:

与建议的问题不完全相同。我在2016年发布的JavaMailAPI 1.5.5上使用oauth2身份验证。连接方法不同。旧的不起作用。

它说存在身份验证问题。此外,我不使用用户名和密码,而是谷歌提供的用户名和访问令牌。

1 个答案:

答案 0 :(得分:2)

您缺少对JavaMail API的一些基本了解。商店用于阅读邮件,传输用于发送邮件。 Gmail are in the JavaMail FAQ的基本示例。尝试使用该代码,如果仍然无效,请使用您正在使用的代码更新您的问题并发布JavaMail debug output