java - 使用 IMAP 从 GMail 获取邮件到 Java 应用程序

标签 java gmail jakarta-mail imap

我想使用 JavaMail 从 Java 应用程序访问 Gmail 中的邮件和 IMAP .为什么我得到一个 SocketTimeoutException ?

这是我的代码:

Properties props = System.getProperties();
props.setProperty("mail.imap.host", "imap.gmail.com");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.connectiontimeout", "5000");
props.setProperty("mail.imap.timeout", "5000");

try {
    Session session = Session.getDefaultInstance(props, new MyAuthenticator());
    URLName urlName = new URLName("imap://MYUSERNAME@gmail.com:MYPASSWORD@imap.gmail.com");
    Store store = session.getStore(urlName);
    if (!store.isConnected()) {
        store.connect();
    }
} catch (NoSuchProviderException e) {
    e.printStackTrace();
    System.exit(1);
} catch (MessagingException e) {
    e.printStackTrace();
    System.exit(2);
}

我已经设置了超时值,这样它就不会“永远”超时。此外,MyAuthenticator 也有用户名和密码,这似乎与 URL 是多余的。还有另一种指定协议(protocol)的方法吗? (我在 IMAP 的 JavaDoc 中没有看到它。)

最佳答案

使用 imap 是一个很好的建议。提供的答案都没有对我有用,所以我用谷歌搜索了更多,发现了一些有用的东西。这是我的代码现在的样子。

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
  Session session = Session.getDefaultInstance(props, null);
  Store store = session.getStore("imaps");
  store.connect("imap.gmail.com", "<username>@gmail.com", "<password>");
  ...
} catch (NoSuchProviderException e) {
  e.printStackTrace();
  System.exit(1);
} catch (MessagingException e) {
  e.printStackTrace();
  System.exit(2);
}

这很好,因为它消除了多余的 Authenticator。我很高兴这能奏效,因为 SSLNOTES.txt 让我头晕目眩。

关于java - 使用 IMAP 从 GMail 获取邮件到 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61176/

相关文章:

java - 可选的 orElse 意外抛出 NPE;取 null 作为值

java - 如何比较Java中的字符串?

email - Gmail 发送名称错误的电子邮件

python - 如何使用 Python 自动登录 gmail atom feed?

email - 显示/隐藏 Gmail 电子邮件正文中的内容

java - 发送附件时不显示正文消息

java - 如何以线程安全的方式访问ThreadpoolExecutor的底层队列

java - IntelliJ IDEA 中的 Ctrl-tab

tomcat - Javamail 适用于 Windows,不适用于 Linux

JavaMail 商店连接 : Connect on demand or keep-alive?