Java 尝试通过IMAP读取电子邮件时,“A1 NO AUTHENTICATE failed”错误消息意味着什么?

Java 尝试通过IMAP读取电子邮件时,“A1 NO AUTHENTICATE failed”错误消息意味着什么?,java,exchange-server,imap,Java,Exchange Server,Imap,我有以下代码,应该通过IMAP打开与Microsoft Exchange服务器的连接: Folder inputFolder = null; Folder doneFolder = null; Store store = null; Properties properties = new Properties(); Session emailSession = null; properties.pu

我有以下代码,应该通过IMAP打开与Microsoft Exchange服务器的连接:

        Folder inputFolder = null;
        Folder doneFolder = null;
        Store store = null;
        Properties properties = new Properties();
        Session emailSession = null;

        properties.put("mail.imaps.host", imapHost);
        properties.put("mail.imaps.user", mailUsername);
        properties.put("mail.imaps.port", Integer.toString(imapPort));
        properties.put("mail.imaps.starttls.enable", "true");

        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustedHosts(new String[]{"XXXXXXXXX"});
        properties.put("mail.imaps.socketFactory", sf);
        properties.put("mail.debug", "true");

        logger.info(String.format("Using user name '%s'", mailUsername));

        try {
            emailSession = createEmailSession(properties);
            store = getStore(emailSession);
            store.connect(mailUsername, mailPassword);
XXXXXXXXX
是主机名

createEmailSession
getStore
方法如下所示:

    Store getStore(final Session emailSession) throws NoSuchProviderException {
        return emailSession.getStore("imaps");
    }

    Session createEmailSession(final Properties properties) {
        return Session.getInstance(properties);
    }
DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle]
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: enable STARTTLS
DEBUG IMAPS: closeFoldersOnStoreFailure
DEBUG IMAPS: trying to connect to host "XXXXXXXXX", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN SASL-IR UIDPLUS MOVE ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAPS: AUTH: PLAIN
DEBUG IMAPS: protocolConnect login, host=XXXXXXXXX, user=YYYYYYYYY, password=<non-null>
DEBUG IMAPS: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAPS: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
DEBUG IMAPS: IMAPStore cleanup, not connected
store.connect(mailUsername、mailPassword)
导致以下错误消息:

Caused by: javax.mail.AuthenticationFailedException: AUTHENTICATE failed.
                at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:732)
                at javax.mail.Service.connect(Service.java:366)
                at javax.mail.Service.connect(Service.java:246)
                at javax.mail.Service.connect(Service.java:267)
调试输出如下所示:

    Store getStore(final Session emailSession) throws NoSuchProviderException {
        return emailSession.getStore("imaps");
    }

    Session createEmailSession(final Properties properties) {
        return Session.getInstance(properties);
    }
DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle]
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: enable STARTTLS
DEBUG IMAPS: closeFoldersOnStoreFailure
DEBUG IMAPS: trying to connect to host "XXXXXXXXX", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN SASL-IR UIDPLUS MOVE ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAPS: AUTH: PLAIN
DEBUG IMAPS: protocolConnect login, host=XXXXXXXXX, user=YYYYYYYYY, password=<non-null>
DEBUG IMAPS: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAPS: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
DEBUG IMAPS: IMAPStore cleanup, not connected

没有帮助。

他们在十月初禁用了PLAIN。任何传输密码的操作都不会得到NO响应,这意味着命令是正确的、可以理解的,等等,但是失败了。您最好的方法是使用oauth,就像在gmail上一样。@arnt谢谢。如果您知道关于此的任何文档或代码示例,请在此处发布链接。@arnt另外,除了OAuth之外,还有其他身份验证方法吗?您的问题不是关于此的第一个问题,因此请浏览以前的问题,那里有链接。我甚至认为我已经亲自回答了这个问题。是的,还有其他的,但是我太忙了,现在没时间用谷歌搜索这个。对不起,问题是,有时候它确实有用