Java邮件iCloud邮件连接到IMAP服务器

时间:2015-08-28 09:53:23

标签: javamail imap icloud

我正在尝试使用Java应用程序连接iCloud邮件。我想使用用户凭据从iCloud IMAP邮件服务器上阅读邮件。但它不起作用。以下代码段适用于Gmail,Yahoo,Outlook,但不适用于iCloud:

public void connectToIMAP(final User user, MailSettings settings) {     
    ICloudSettings iCloud = (ICloudSettings) settings;

    properties = System.getProperties();
    properties.setProperty("mail.store.protocol", iCloud.imap.protocol);
    properties.setProperty("mail.imap.starttls.enable", "true");
    properties.setProperty("mail.imap.debug", "true");
    try {
        session = Session.getInstance(properties);
        session.setDebug(true);         
        store = session.getStore();         
        store.connect(iCloud.imap.host, iCloud.imap.port, user.getEmail(), user.getPassword());
        folder = store.getFolder(MailSettings.INBOX);
        folder.open(Folder.READ_ONLY);          
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public ICloudSettings() {
    imap.host = "imap.mail.me.com";
    imap.port = 993;
    imap.protocol = "imaps";
}

调试信息是:

DEBUG:setDebug:JavaMail 1.5.4版

DEBUG:getProvider()返回

javax.mail.Provider [STORE,IMAPS,com.sun.mail.imap.IMAPSSLStore,甲骨文]

DEBUG IMAPS:mail.imap.fetchsize:16384

DEBUG IMAPS:mail.imap.ignorebodystructuresize:false

DEBUG IMAPS:mail.imap.statuscachetimeout:1000

DEBUG IMAPS:mail.imap.appendbuffersize:-1

DEBUG IMAPS:mail.imap.minidletime:10

DEBUG IMAPS:closeFoldersOnStoreFailure

DEBUG IMAPS:尝试连接到主机“imap.mail.me.com”,端口993,isSSL true * OK [功能mr11p00im-iscream006 15E43 XAPPLEPUSHSERVICE IMAP4 IMAP4rev1 SASL-IR AUTH = ATOKEN AUTH = PLAIN] iSCREAM准备隆隆声(15E43-20056:9352)mr11p00im-iscream006 [24:210:09:33:11:22]

DEBUG IMAPS:AUTH:ATOKEN

DEBUG IMAPS:AUTH:PLAIN

DEBUG IMAPS:protocolConnect登录,host = imap.mail.me.com,user =yoshsh.h.patil @ icloud.com,密码=

DEBUG IMAPS:AUTHENTICATE PLAIN命令跟踪被抑制

DEBUG IMAPS:AUTHENTICATE PLAIN命令结果:A0 NO [AUTHENTICATIONFAILED]身份验证失败 javax.mail.AuthenticationFailedException:[AUTHENTICATIONFAILED]身份验证失败     at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:723)     在javax.mail.Service.connect(Service.java:364)

2 个答案:

答案 0 :(得分:1)

您好我也通过IMAP连接到iCloud,但没有使用java邮件。我正在使用K9邮件客户端的一段代码,可以在github上找到。我发现当您为icloud帐户启用了2因子授权时,访问IMAP不起作用。第二种情况,当我收到类似的消息(身份验证失败)时,我使用的电子邮件地址与@ icloud.com不同。例如,我使用我的Gmail帐户设置了我的apple id,并创建了@ icloud.com别名。我无法使用gmail地址作为用户名访问IMAP,但是当我使用@ icloud.com别名时没有问题。

答案 1 :(得分:1)

如果您启用了2个身份验证,则需要创建应用专用密码。使用应用专用密码而不是标准Apple ID密码。

此外,如果您的Apple ID以@me.com结尾(例如foo@me.com),那么IMAP用户名应该只是电子邮件地址的用户名部分(对于email => foo @ me.com,IMAP username => foo)