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

如何使用.NET MailKit从同一账户的两个邮箱读取邮件?

读取同一AD账号下的多个Exchange邮箱邮件

当你的AD账号corp\john.doe拥有两个邮箱权限时,MailKit可以通过指定目标邮箱的IMAP文件夹路径来访问不同的邮箱,具体操作如下:

核心思路

Exchange的IMAP服务会将用户有权限访问的所有邮箱挂载在user/命名空间下,你可以通过邮箱地址定位到目标邮箱的根文件夹,再访问其收件箱进行邮件读取。

修改后的代码示例

using (var client = new ImapClient())
{
    // 连接并认证IMAP服务器
    client.Connect("imap.corp.com", 993, SecureSocketOptions.SslOnConnect);
    client.Authenticate("corp\\john.doe", "password");

    // 处理第一个邮箱(默认主邮箱:john.doe1@corp.com)
    ProcessMailbox(client.Inbox, "john.doe1");

    // 处理第二个邮箱:john.doe2@corp.com
    // 通过Exchange IMAP的命名空间路径获取目标邮箱根文件夹
    var secondMailboxRoot = client.GetFolder("user/john.doe2@corp.com");
    var secondInbox = secondMailboxRoot.GetSubfolder("Inbox");
    ProcessMailbox(secondInbox, "john.doe2");

    client.Disconnect(true);
}

// 提取公用方法处理邮件,减少重复代码
void ProcessMailbox(IMailFolder folder, string mailboxIdentifier)
{
    folder.Open(FolderAccess.ReadOnly);
    var uids = folder.Search(SearchQuery.All);

    foreach (var uid in uids)
    {
        var message = folder.GetMessage(uid);
        // 用邮箱标识区分保存的邮件文件
        message.WriteTo($"{mailboxIdentifier}_{uid}.eml");
    }
}

注意事项

  • 确保corp\john.doe账号已被授予john.doe2@corp.com邮箱的访问权限(如完全访问、只读权限),否则会出现权限不足的错误。
  • 如果不确定目标邮箱的IMAP路径,可以通过client.ListSubfolders(client.PersonalNamespaces[0])列出当前账号可访问的所有邮箱文件夹,从中找到对应邮箱的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:18