0

我知道这个问题之前已经被问过几次了,但是我已经尝试了在每个问题中找到的所有解决方案,但没有一个有效,我有一个 java 应用程序可以连接到邮件并从电子邮件中下载所有附件,应用程序有已经正常工作了 1 个多月,但今天它突然停止使用一封特定的电子邮件,我通常使用该应用程序的所有其他电子邮件都可以正常工作,即使在尝试了所有可能的解决方案后,我发现我得到了相同的结果A1 NO LOGIN failed.

它一直与我使用的用户名和密码一起使用,我确保密码没有通过使用 Outlook 和 Outlook Web 登录而更改,并且都运行良好。我不认为与防火墙有关,因为它与我正在使用的所有其他电子邮件一起工作正常,只是这封电子邮件突然不起作用。

我用来连接的电子邮件来自我的工作,它有一个带有 office365、ej 的自定义域。

mail@mydomain.com

我早上尝试了该应用程序,它与那封特定的电子邮件配合得很好,几个小时后,我从异常中收到了以下消息:

javax.mail.AuthenticationFailedException: LOGIN 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)

并且调试器返回以下内容:

DEBUG: setDebug: JavaMail version 1.6.2
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 "outlook.office365.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready. [QgBOADYAUABSADEAOQBDAEEAMAAwADYAMgAuAG4AYQBtAHAAcgBkADEAOQAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A]
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAPS: AUTH: PLAIN
DEBUG IMAPS: AUTH: XOAUTH2
DEBUG IMAPS: protocolConnect login, host=outlook.office365.com, user=theEmail@MyDomain.biz, password=<non-null>
DEBUG IMAPS: mechanism PLAIN disabled by property: mail.imaps.auth.plain.disable
DEBUG IMAPS: mechanism LOGIN not supported by server
DEBUG IMAPS: mechanism NTLM not supported by server
DEBUG IMAPS: mechanism XOAUTH2 disabled by property: mail.imaps.auth.xoauth2.disable
DEBUG IMAPS: LOGIN command trace suppressed
DEBUG IMAPS: LOGIN command result: A1 NO LOGIN failed.

我的代码如下:

public MailData office() {
        MailData DATA= new MailData();
        String PROTOCOL = "imaps", HOST = "outlook.office365.com", ENCRYPTION_TYPE = "tls", PORT = "993";
        DATA=readEmail(PROTOCOL, HOST, uname, pwd, ENCRYPTION_TYPE, PORT);
        return DATA;
    }

public MailData readEmail(String PROTOCOL, String HOST, String USER, String PASSWORD, String ENCRYPTION_TYPE, String PORT) {
    MailData INFO=new MailData();
    Properties props = new Properties();
    props.setProperty("mail.store.protocol", PROTOCOL);
    props.setProperty("mail.debug.auth ","true");
    props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.setProperty("mail.imaps.socketFactory.fallback", "false");
    props.setProperty("mail.imaps.ssl.enable", "true");
    props.setProperty("mail.imaps.socketFactory.port",PORT);
    props.setProperty("mail.imaps.starttls.enable", "true");
    props.setProperty("mail.imaps.auth.plain.disable", "true");

    try{
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.imaps.starttls.enable", "true");
        props.put("mail.imaps.ssl.socketFactory", sf);
    }catch(Exception e){
        e.printStackTrace();
    }

    try {

        Session session = Session.getInstance(props, null);
        session.setDebug(true);
        Store store = session.getStore("imaps");
        store.connect(HOST, USER, PASSWORD);
        ////////////REST OF THE CODE

我知道代码并不完美,但它可以与任何其他使用它的电子邮件一起使用,它只是这封突然停止工作的特定电子邮件,请帮助,我不知道还能做什么或尝试。

4

1 回答 1

0

与其提供普通密码,不如创建一个应用程序密码并使用它。它会起作用。

步骤 登录 Office 365 获得 MYAccount-->安全和隐私-->附加安全验证-->创建和管理应用密码

于 2020-04-01T07:33:40.500 回答