使用IMAP将邮件从GMail传输到Java应用程序

使用IMAP将邮件从GMail传输到Java应用程序

Getting mail from GMail into Java application using IMAP

我想使用JavaMail和IMAP从Java应用程序访问Gmail中的邮件。 为什么会收到SocketTimeoutException?

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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无关。 还有另一种指定协议的方法吗? (我没有在JavaDoc for IMAP中看到它。)


使用imaps是一个很好的建议。所提供的答案均不适合我,因此我在Google上搜索了更多的答案,并发现了有效的方法。这是我的代码现在的样子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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使我头晕。


您需要对imaps使用以下属性:

1
2
3
4
props.setProperty("mail.imaps.host","imap.gmail.com");
props.setProperty("mail.imaps.port","993");
props.setProperty("mail.imaps.connectiontimeout","5000");
props.setProperty("mail.imaps.timeout","5000");

注意它是" imaps",而不是" imap",因为您使用的协议是imaps(IMAP + SSL)


在JavaMail中,可以将imaps用作URL方案,以通过SSL使用IMAP。 (有关更多详细信息,请参见JavaMail发行版中的SSLNOTES.txt。)例如,imaps://username%40gmail.com@imap.gmail.com/INBOX

同样,使用smtps通过Gmail发送电子邮件。例如smtps://username%40gmail.com@smtp.gmail.com/。同样,请阅读SSLNOTES.txt了解更多详细信息。希望能帮助到你!


您只能使用SSL连接到GMail。设置以下属性将对您有所帮助。

1
2
props.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imap.socketFactory.fallback","false");

在给定经典帐户nickname@gmail.com和企业帐户employee@business.com的情况下,这对我和我的团队都是有效的:

1
2
3
4
5
6
7
8
            final Properties properties = new Properties();
            properties.put("mail.imap.ssl.enable","true");

            imapSession = Session.getInstance(properties, null);
            imapSession.setDebug(false);
            imapStore = imapSession.getStore("imap");

            imapStore.connect("imap.gmail.com", USERNAME,"password");

在传统情况下使用USERNAME ="昵称",在商业帐户情况下使用USERNAME =" employee@business.com"。

在传统情况下,如果您使用旧的JavaMail依赖关系,请不要忘记在此处降低帐户安全性:https://www.google.com/settings/security/lesssecureapps

在这两种情况下,如果为帐户启用了IMAP,请检查GMail设置=>转发POP / IMAP。

希望能帮助到你!

更进一步:

  • http://www.oracle.com/technetwork/java/javamail/faq/index.html#gmail
  • https://support.google.com/mail/accounts/answer/78754

如果您想了解更多有关将JavaMail与Gmail结合使用的示例代码(例如,将Gmail标签转换为IMAP文件夹名称,或使用IMAP IDLE),请在SourceForge上签出我的程序GmailAssistant。


我使用以下属性来获取商店,并且效果很好。

"mail.imaps.host" :"imap.gmail.com"
"mail.store.protocol" :"imaps"
"mail.imaps.port" :"993"


检查http://g4j.sourceforge.net/。使用此API构建的Gmail客户端数量最少。


您需要安装JSSE才能将SSL与Java结合使用


1
URLName server = new URLName("imaps://<gmail-user-name>:<gmail-pass>@imap.gmail.com/INBOX");


推荐阅读

    笑笑看西卡电脑的片子|我想看卡西

    笑笑看西卡电脑的片子|我想看卡西,,1. 我想看卡西个人喜欢的电影排名①肖申克的救赎理由:很多年前曾经看过一次,理解为男主复仇励志片。再次

    Win8平板电脑,这是Win8片好四

    Win8平板电脑,这是Win8片好四,,之前我们看到Android系统绝大多数的平板电脑,与巨头微软的Win8平板系统中加入了这一行列,导致Win8平板电脑,迅

    未知软件异常应用程序错误解决方案

    未知软件异常应用程序错误解决方案,,我有很多朋友的电脑未知软件异常应用程序错误的问题,对于异常未知的软件异常中的应用一般提示(0xc00000

    qq电脑无线传输|手机qq怎么传输到电脑

    qq电脑无线传输|手机qq怎么传输到电脑,,1. 手机qq怎么传输到电脑1、通过手机数据线连接电脑,下拉手机状态栏选择“传文件”,并开启USB调试,连

    这是超级划算的五推荐超级划算

    这是超级划算的五推荐超级划算,,随着Ivy Bridge处理器的新的性能和处理器内置图形核心具有明显改善Ivy Bridge处理器发布之前不久,和功率降

    小米手机安装的应用程序包在哪里

    小米手机安装的应用程序包在哪里,,问题: 下载小米手机系统的安装文件在哪里 答案uff1a 下载应用程序包位置:SD卡>下载。 (摘自:小米手册:米

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法