You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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为true时的错误
  • 设置SSL为false时,出现错误:
    SSL为false时的错误

解决方案

Microsoft 365(原Office365)早已逐步禁用IMAP/SMTP的基本认证(包括普通密码、应用密码),这就是你用传统账号密码方式连接失败的核心原因。必须切换到OAuth 2.0认证才能正常访问。

实现步骤

  1. Azure AD应用注册

    • 登录Azure门户,进入Azure Active Directory,注册新应用程序
    • 添加API权限:搜索Office 365 Exchange Online,用户交互场景添加IMAP.AccessAsUser.All(委托权限)并完成管理员同意;后台服务场景改用IMAP.AccessAsApp应用权限
  2. 获取OAuth2访问令牌

    • 根据场景选择认证流程:用户交互用授权码流程,后台服务用客户端凭证流程
    • 确保生成的令牌具备访问目标邮箱IMAP服务的权限
  3. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:13:12