如何使用.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
相关产品推荐
相关产品推荐

