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

使用MailKit连接Office 365 IMAP失败,代码对Gmail/Hotmail有效

Office 365 IMAP登录失败问题(MailKit)

我使用MailKit库连接IMAP服务时,代码可正常连接Gmail和Hotmail,但连接Office 365时出现登录失败错误。

问题代码

using (var client = new ImapClient(new ProtocolLogger("imap.log")))
{
      client.Timeout = 120000;
      client.Connect("outlook.office365.com", 
                      93,SecureSocketOptions.SslOnConnect);
      client.Authenticate("xxxxx@xxxxinet.com", "XXXXXPassword");
      client.Inbox.Open(FolderAccess.ReadOnly);

      var uids = client.Inbox.Search(SearchQuery.All);

      foreach (var uid in uids)
      {
         var message = client.Inbox.GetMessage(uid);
         // 将邮件写入文件
         message.WriteTo(string.Format("{0}.eml", uid));
     }
     client.Disconnect(true);
}

解决方法

1. 修正IMAP端口错误

Office 365的IMAP SSL标准端口是993,代码中填写的93是错误值,这是导致连接失败的直接原因。

2. 确认基本认证权限

目前多数Office 365租户已禁用用户名+密码的基本认证方式,如果账号开启了MFA(多因素认证)或组织限制了基本认证,即使端口正确也会登录失败,这种情况需要切换到OAuth2认证。

3. 修正后的代码示例

using (var client = new ImapClient(new ProtocolLogger("imap.log")))
{
    client.Timeout = 120000;
    // 替换为Office 365正确的IMAP SSL端口
    client.Connect("outlook.office365.com", 993, SecureSocketOptions.SslOnConnect);
    
    // 场景1:基本认证可用时使用
    client.Authenticate("xxxxx@xxxxinet.com", "XXXXXPassword");
    
    // 场景2:基本认证禁用时,使用OAuth2认证(需提前获取合法的访问令牌)
    // var oauth2 = new SaslMechanismOAuth2("xxxxx@xxxxinet.com", "你的OAuth2访问令牌");
    // client.Authenticate(oauth2);
    
    client.Inbox.Open(FolderAccess.ReadOnly);

    var uids = client.Inbox.Search(SearchQuery.All);

    foreach (var uid in uids)
    {
        var message = client.Inbox.GetMessage(uid);
        // 将邮件写入文件
        message.WriteTo($"{uid}.eml");
    }
    client.Disconnect(true);
}

补充说明

若需配置OAuth2认证,需在Azure AD中注册应用,获取客户端ID、租户ID并生成访问令牌,按MailKit的OAuth2认证逻辑实现即可。

内容的提问来源于stack exchange,提问作者nadun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:05:15