Office365 IMAP访问:用户已经通过身份验证但未连接

8
我正在使用node-imap构建自己的IMAP客户端,并在office365上针对帐户进行测试。由于它正在开发中,我倾向于在IMAP服务器上进行更多的测试,但并不一定会认为这太多了。偶尔,我会开始收到IMAP响应“BAD User is authenticated but not connected”,这是在成功登录后的第一个命令之后发生的。这与其他类似文章指出的密码更改无关,因为在此期间我的密码没有更改。当发生这种情况时,帐户似乎会被锁定一段时间。我似乎可以通过通过office365管理面板禁用然后重新启用帐户上的IMAP来使其自由摆动。所以,看起来在office365的IMAP接口中有某种断路器。Microsoft记录了20个并发会话的限制。在我的情况下,我每次只打开一个会话,但是很快就会关闭它并重新打开它(调试),因此如果我违反了某个限制,它不会在我阅读的任何地方记录。 Microsoft支持已经提供了帮助,但无法帮助我确定原因。为了将此应用程序投入生产,我需要知道是什么原因导致这种情况发生。是否有其他人在office365中有过类似的经历?

2
使用云服务提供商来测试正在开发中的代码并不是一个好方法。我建议安装一个你可以控制的服务器(如dovecot、courier等)进行初始测试/开发目的。然后转向更标准兼容的服务(例如gmail(减去他们荒谬的文件夹实现)),然后再转向像office365这样的奇怪服务 :) - Max
我不反对,但我现在已经超过那个点了。我的大部分调试工作都是关于这种奇怪的怪癖。 - Jim B.
谢谢你提醒我如何禁用/启用IMAP!我遇到了问题,我相信是由于在快速更改共享邮箱的主要电子邮件地址并在旧地址创建邮件列表之间造成的。 - M Conrad
1
五年后... @Jim-B 你解决了那个问题吗?我遇到了完全相同的o365行为,但我不知道我错过了什么。 - Spec
4个回答

1
你可能想看一下Outlook REST API而不是IMAP。REST API是Office 365推荐的开发API,非常适合具有基于Webhook的通知等功能的应用程序开发,并且随着服务中的新功能和功能不断发展。它们也没有IMAP具有的面向会话的本质,这导致了你遇到的问题。这里有一个关于O365的NodeJS快速入门指南:https://dev.outlook.com/RestGettingStarted/Tutorial/node

是的,我正在看那个,但我正在构建的应用程序不仅适用于Office365。IMAP在技术上得到支持,对于我所要做的事情来说,它完全足够。除了这种奇怪的行为,它运行良好。 - Jim B.
它们绝对比我以前使用过的每个邮件API都要好,但它们仍然相当初级。我已经遇到了一个致命的错误:http://stackoverflow.com/questions/35398770/outlook-rest-api-getfolders-not-returning-all-folders/35421865#35421865 在库方面,我需要能够同步文件夹内容和一些其他高级功能,但该库尚未公开这些功能,因此我必须等待或自己开发这些功能。 - Jim B.
Beta预览版提供了同步机制预览。您需要手动同步文件夹树,然后使用此同步机制。https://msdn.microsoft.com/office/office365/APi/mail-rest-operations#SynchronizeMessagesAPI - Benoit Patra

1

您需要使用PowerShell在Exchange Online上执行2个操作

您需要创建服务主体

New-ServicePrincipal -AppId {clientid} -ServiceId {enterprise application objectid} -Organization {tenantid}

您需要授予服务主体访问邮箱的权限,如果主体没有访问权限,则会出现“用户未连接”的错误。

Add-MailboxPermission -Identity {email} -User -ServiceId {enterprise application objectid} -AccessRights FullAccess

请参阅“在Exchange中注册服务主体”: https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth


它可以运行,只需进行细微的修复。不是-User -ServiceId,而是-User {ServiceId}。Add-MailboxPermission -Identity {email} -User {ServiceId(企业应用程序对象ID)} -AccessRights FullAccess - tfonias74

0

如果您已经通过网页登录到您的邮箱并验证了密码的正确性,那么问题可能是Exchange服务器正在保留您所有活动登录会话的列表。

尝试通过在帐户安全页面https://mysignins.microsoft.com/security-info上单击“在所有位置注销”来注销所有其他位置,并再次尝试登录。


0

即使用户没有通过IMAP访问服务器的权限,Office365也会接受连接并成功验证,这就是在这种情况下它给出的确切错误。

要解决此问题,请进入Office365面板,打开用户,并确保已选中IMAP权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接