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

问题描述 投票:0回答:1

我有以下代码,应该通过 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);
    }

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)

调试输出如下所示:

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

凭证(

YYYYYYYYY
和相应的密码)曾经有效。然后我开始收到这样的消息。我与管理员交谈,他们告诉我,由于多次尝试使用错误密码登录,用户被锁定。他们还说他们解锁了用户,现在应该可以使用了。

但事实并非如此。

根据上面的调试输出,如何缩小问题范围?

更新1:根据this页面,Exchange服务器仅支持Kerberos和NTLM身份验证,而我正在使用

PLAIN
。也许这就是失败的原因。

更新 2: 这个答案建议使用 ews-java-api 来访问 Exchange Server。会尝试一下。

更新 3: 使用

抑制纯文本身份验证
properties.put("mail.imap.auth.plain.disable", "true");

没有帮助。

java exchange-server imap
1个回答
-1
投票

我也遇到了和你一样的问题,请问你解决了吗?请您与我分享我被困了3天的解决方案:(

© www.soinside.com 2019 - 2024. All rights reserved.