使用Mailkit访问Exchange共享文件夹

时间:2016-08-03 15:28:07

标签: c# mailkit

我正在创建一个应用程序,用于从Microsoft托管的Exchange服务器(Office 365)上的帐户中读取电子邮件和附件。我遇到的困难是我无法找到让MailKit API查看我已连接到的电子邮件帐户上的共享文件夹的方法。

我可以连接到我的电子邮件帐户,查看我的主帐户下的收件箱和其他文件夹。在Outlook中,文件夹的树视图在根目录中显示我的主帐户(与我的主电子邮件地址关联),其中包含该帐户下的收件箱和其他文件夹。 Outlook然后显示我的共享文件夹名称(与另一个电子邮件地址关联)也从根目录开始,其中包含收件箱和其他文件夹。共享文件夹(及其关联的电子邮件地址)实际上没有自己的Exchange帐户可供连接。

连接后,我检查了ImapClient.SharedNamespacesImapClient.Others个集合,它们都是空的。

有没有办法在Exchange中使用MaikKit查看此类共享文件夹?

3 个答案:

答案 0 :(得分:5)

这可以通过在身份验证期间将反斜杠和共享邮箱别名附加到用户名的末尾来实现,这里是一些示例代码......

void Main()
{
    var userName = "main@user.com"; // The email address that has permissions to the shared mailbox
    var sharedMailboxAlias = "aliasName"; // This is the alias name as setup in Exchange
    var password = Util.GetPassword("Office365Password"); // Util.Password is a LinqPad method
    using (var client = new ImapClient())
    {
        client.Connect("outlook.office365.com", 993, true);
        client.AuthenticationMechanisms.Remove("XOAUTH2");
        client.Authenticate(userName + @"\" + sharedMailboxAlias, password);
        var inbox = client.Inbox;
        inbox.Open(FolderAccess.ReadOnly);
        Console.WriteLine("Total messages: {0}", inbox.Count);
        Console.WriteLine("Recent messages: {0}", inbox.Recent);
        client.Disconnect(true);
    }
}

共享邮箱别名通常默认为@

之前的电子邮件地址的左侧部分

答案 1 :(得分:1)

Exchange不提供通过IMAP访问共享文件夹的方法,因此无法使用IMAP执行您尝试执行的操作。

答案 2 :(得分:-1)

肖恩在1月17日的回答是正确的。请注意,您必须删除XOATH2身份验证,因为Office 365不支持它,即使它说它在您第一次连接时也会这样做。 MailKit然后尝试使用XOAUTH2并且在它无法工作时有一个内部异常。这可能是MailKit中的一个错误。