Office365邮箱自动读取未读邮件功能异常排查求助
问题描述
我们开发了自动读取收件箱未读邮件的流程,该流程在我方及其他域邮件服务器上运行正常,但对接客户的Office365邮箱服务器时完全无法工作。已尝试以下操作,均未成功:
- 生成应用密码登录
- 使用应用密钥登录
- 分别测试了limilab和AE.Net.Mail两个邮件处理包
当前使用AE.Net.Mail的核心代码片段:
using (var imap = new ImapClient(_importEmailSettings.Host, _importEmailSettings.Email, _importEmailSettings.Password, AuthMethods.Login, 993, false,true)) { var msgs = imap.SearchMessages(SearchCondition.Unseen()); imap.SetFlags(AE.Net.Mail.Flags.Seen, uid.Value); }
错误现象
- 设置SSL为
true时,出现错误:
- 设置SSL为
false时,出现错误:
解决方案
Microsoft 365(原Office365)早已逐步禁用IMAP/SMTP的基本认证(包括普通密码、应用密码),这就是你用传统账号密码方式连接失败的核心原因。必须切换到OAuth 2.0认证才能正常访问。
实现步骤
Azure AD应用注册
- 登录Azure门户,进入Azure Active Directory,注册新应用程序
- 添加API权限:搜索
Office 365 Exchange Online,用户交互场景添加IMAP.AccessAsUser.All(委托权限)并完成管理员同意;后台服务场景改用IMAP.AccessAsApp应用权限
获取OAuth2访问令牌
- 根据场景选择认证流程:用户交互用授权码流程,后台服务用客户端凭证流程
- 确保生成的令牌具备访问目标邮箱IMAP服务的权限
修改AE.Net.Mail代码适配OAuth2
AE.Net.Mail原生支持OAuth2认证,替换原有登录逻辑即可:var oauthToken = "替换为你的有效OAuth2访问令牌"; using (var imap = new ImapClient( "outlook.office365.com", // Office365固定IMAP地址 _importEmailSettings.Email, oauthToken, AuthMethods.OAuth2, 993, true // 必须启用SSL )) { var msgs = imap.SearchMessages(SearchCondition.Unseen()); foreach (var msg in msgs) { imap.SetFlags(AE.Net.Mail.Flags.Seen, msg.Uid); } }
关键注意事项
- Office365 IMAP端口固定为993,必须启用SSL,无需尝试关闭SSL
- 客户端凭证流程下,需通过Exchange PowerShell给目标邮箱授予应用访问权限:
New-ApplicationAccessPolicy -AppId <你的应用ID> -PolicyScopeGroupId <目标邮箱地址> -AccessRight Allow -Description "允许应用访问邮箱" - 基本认证已被微软淘汰,后续会完全禁用,不要再尝试该方式
内容的提问来源于stack exchange,提问作者Mazik Dev
相关产品推荐
相关产品推荐

