【问题标题】:javax.mail.MessagingException: A3 BAD User is authenticated but not connectedjavax.mail.MessagingException:A3 BAD 用户已通过身份验证但未连接
【发布时间】:2016-09-28 03:29:00
【问题描述】:

我正在尝试使用 IMAP 协议从 Exchange 服务器读取邮件。我已经实现了代码。但是在执行代码时会出现以下异常。这个异常偶尔会发生,我没有得到发生这种情况的原因。

javax.mail.MessagingException: A3 BAD 用户已通过身份验证但未连接。; 嵌套异常是: com.sun.mail.iap.BadCommandException:A3 BAD 用户已通过身份验证但未连接。 在 com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:958) 在 agent.client.attributeGroups.SendReceive.readMailAndReply(SendReceive.java:115) 在 agent.client.attributeGroups.MailQueue.calculateTime(MailQueue.java:45) 在 agent.client.MainClass$1.run(MainClass.java:72) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

代码:

Properties props = new Properties();
            props.put("mail.imap.auth", "true");
            props.put("mail.imap.ssl.enable", "true");
            props.put("mail.imap.host", "outlook.office365.com");
            props.put("mail.imap.port", "993");
            props.put("mail.transport.protocol", "imap");  
            props.put("mail.imap.auth.plain.disable", true);
            props.put("mail.imap.auth.ntlm.disable", true);
            props.put("mail.imap.auth.gssapi.disable", true);

          //Get session object by passing credentials.
            Session session = Session.getDefaultInstance(props, 
                    new javax.mail.Authenticator(){
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(
                                    mailId, mailPass);}});

         //Creating IMAP store and connecting it to Mailbox using credentials.   
         store = session.getStore("imap");
         store.connect(mailId, mailPass);

             //Getting mailbox mails.
             inbox = store.getFolder("INBOX");
             inbox.open(Folder.READ_WRITE); 
             int totalMailCount = inbox.getMessageCount();

             //Reading all mails to Message array.
             Message[] messages = inbox.getMessages(1, totalMailCount);
             for (Message mail : messages) 
             {  
                    Address[] fromAddresses = mail.getFrom();                      
                    String mailFrom = fromAddresses[0].toString();
                    String mailSubject = mail.getSubject();
                System.out.println(mailFrom);
                    System.out.println(mailSubject);
                    mail.setFlag(Flags.Flag.DELETED,true);

                   }                       
                }

             }

请向我提出解决此异常的建议。

【问题讨论】:

    标签: jakarta-mail exchange-server office365


    【解决方案1】:

    我也遇到过这个问题 您没有关闭连接,它始终处于打开状态。

    如果您使用商店和收件箱,它总是经过身份验证但未连接 认证成功但未连接,因为会话是天堂。

    您需要在代码中添加以下行。

    阅读后先关闭收件箱

    inbox.close(true);

    接下来关闭商店连接

    store.close();

    如果您正确关闭已建立的连接,它将根据会话进行连接。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      我的问题是因为我使用一个流程将电子邮件从收件箱移动到另一个不同的文件夹。我是分批进行的,因为移动大量电子邮件会引发超时异常,所以我尝试移动少量电子邮件并避免超时异常,但开始出现 BadCommandException:A2 BAD User is authenticated but not connected 异常。所以我寻找对我有用的数量。我得到了这个帖子的想法 https://github.com/mscdex/node-imap/issues/689

      1. 这是 Microsoft 关闭聊天客户端的机制。这 解决方案是减少登录此帐户的频率。

      2. 这是由于 IMAP 实现中的错误造成的。如果客户端提供了一个有效的用户名但一个无效的密码,服务器 接受登录,但后续命令失败 上述错误信息。

      3. 这是一个共享邮箱,您使用的登录方案不正确。使用 O365 的 Username@DomainName\SharedMailboxAlias

      【讨论】:

        【解决方案3】:
        • 首先,您应该检查 mail.imap.host 的值是否等同于电子邮件地址的服务器。 If you use outlook OC
        • 如果为真,您可以尝试将协议更改为 IMAPS

        我希望sn-ps这组属性可以帮助很多想要接收邮件的人。

            sysProperties.put("mail.imap.starttls.enable", true);
            MailSSLSocketFactory sf = null;
            try {
                sf = new MailSSLSocketFactory();
            } catch (GeneralSecurityException e1) {
                e1.printStackTrace();
            }
            sf.setTrustAllHosts(true);
        
            sysProperties.setProperty("mail.imaps.auth.plain.disable", "true");
            sysProperties.setProperty("mail.imaps.auth.ntlm.disable", "true");
        
            sysProperties.put("mail.imap.ssl.socketFactory", sf);
            sysProperties.setProperty("mail.imap.port", instance.getConfigPropertiesValue(configProperties, "mail.imap.port"));
            sysProperties.setProperty("mail.imap.ssl.socketFactory.port", "993");
        
            Session session = Session.getDefaultInstance(sysProperties, null);
        
            Store store = null;
            store = session.getStore("imaps");
            store.connect("mail.serverhost", "mail.serverport"),  "mail.username,"mail.password"));
        

        【讨论】:

          【解决方案4】:

          这可能与您的交换设置有关吗?我在使用 imap 和 outlook.office365.com 时遇到了这个错误。我尝试在 Outlook 中设置相同的帐户以确保它正常工作。虽然我能够添加帐户,但当我真正尝试查看收件箱时,Outlook 变得没有响应。因此,就我而言,一般来说是帐户问题,而不是我尝试连接的方式。

          【讨论】:

            【解决方案5】:

            它似乎是bug in the office365 server。它告诉您您的密码错误。

            【讨论】:

            • 我不认为密码错误,因为这种异常偶尔会发生。其他时间都执行得很好。
            • 尝试修复common mistakes #1 和 #4 看看是否有帮助。
            猜你喜欢
            • 2019-07-28
            • 2016-06-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-07
            • 1970-01-01
            • 2015-02-24
            • 1970-01-01
            • 2013-03-16
            相关资源
            最近更新 更多