Доступ к общим папкам Exchange с помощью Mailkit

Я создаю приложение для чтения электронных писем и вложений из учетной записи на сервере Exchange, размещенном в Microsoft (Office 365). Моя трудность заключается в том, что я не могу найти способ заставить MailKit API видеть общие папки в учетной записи электронной почты, к которой я подключился.

Я могу подключиться к своей учетной записи электронной почты и видеть свою папку «Входящие» и другие папки, находящиеся под моей основной учетной записью. В Outlook древовидное представление папок показывает мою основную учетную запись (связанную с моим основным адресом электронной почты) в корне, а также папку «Входящие» и другие папки под этой учетной записью. Затем Outlook показывает имя моей общей папки (связанной с другим адресом электронной почты), также начиная с корня, с его папкой «Входящие» и другими папками под ним. Общая папка (со связанным с ней адресом электронной почты) фактически не имеет собственной учетной записи Exchange для подключения.

При подключении я изучил коллекции ImapClient.SharedNamespaces и ImapClient.Others, и обе они пусты.

Есть ли способ увидеть этот тип общей папки в Exchange с помощью MaikKit?


person Fast Eddie    schedule 03.08.2016    source источник


Ответы (3)


Это возможно, добавив обратную косую черту и псевдоним общего почтового ящика в конец имени пользователя во время аутентификации, вот пример кода ...

void Main()
{
    var userName = "[email protected]"; // 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.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);
    }
}

Псевдоним общего почтового ящика обычно по умолчанию находится в левой части адреса электронной почты перед @.

Обновлено: согласно комментарию @Nischo - удаление XOAUTH2 больше не требуется. Для получения дополнительных сведений: https://github.com/jstedfast/MailKit/issues/566

Поэтому удалили следующую строку, поскольку она больше не

client.AuthenticationMechanisms.Remove("XOAUTH2");
person Sean    schedule 17.01.2017
comment
Для меня это было возможно в июле 2020 года без удаления XOAUTH2. client.AuthenticationMechanisms.Remove (XOAUTH2); - person Nischo; 29.07.2020

Exchange не предоставляет возможность получить доступ к вашим общим папкам через IMAP, поэтому невозможно делать то, что вы пытаетесь сделать, с помощью IMAP.

person jstedfast    schedule 04.08.2016
comment
У вас есть ссылка на это? - person ogborstad; 23.05.2017

Ответ Шона 17 января правильный. Обратите внимание, что вы ДОЛЖНЫ удалить проверку подлинности XOATH2, поскольку Office 365 не поддерживает ее, хотя и сообщает об этом при первом подключении. Затем MailKit пытается использовать XOAUTH2 и выдает внутреннее исключение, когда он не работает. Вероятно, это ошибка MailKit.

person randall g    schedule 11.07.2017