Неправильные элементы почтового ящика извлекаются с помощью управляемого API веб-служб Exchange в C#

Я пытаюсь извлечь элементы "Входящие" из определенного почтового ящика (в котором у меня есть разрешения), используя управляемый API-интерфейс веб-служб Exchange. Сначала я протестировал код, используя свой собственный адрес электронной почты через AutodiscoverUrl, и он отлично работает. Однако, когда я попытался использовать другой адрес электронной почты, EWS по-прежнему извлекает мои собственные элементы входящих сообщений. Это из-за кеша или еще чего?

Мой код выглядит следующим образом:

    ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    ex.AutodiscoverUrl("someothermailbox@company.com");

    FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

    foreach (Item item in findResults.Items)
         Console.WriteLine(item.Subject);

2 ответа

Решение

Адрес электронной почты, данный AutodiscoverUrl не имеет никакого отношения к тому, к какому почтовому ящику вы привязываете.

Существует (как минимум) два способа получения элементов входящих из почтового ящика других пользователей: делегировать доступ и олицетворение.

Если у вас есть делегированный доступ к почтовому ящику других пользователей, вы можете указать почтовый ящик в качестве параметра при вызове FindItems:

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("someothermailbox@company.com")), 
    new ItemView(10));

Если у вас есть права выдавать себя за другого пользователя, вы можете выдать себя за другого при подключении к EWS и при следующем вызове FindItem будет работать с входящим почтовым ящиком от имени другого пользователя:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("someothermailbox@company.com");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "someothermailbox@company.com");
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

Отказ от ответственности: я написал вышеупомянутый код, фактически не проверяя его на реальном сервере Exchange.

Если вы хотите отправить электронное письмо, используя разрешение только делегатов, сохраните его перед отправкой. он установит адрес smtp, необходимый для отправки сообщения.

        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new WebCredentials("user1", "1234", "domain.com");
        service.AutodiscoverUrl("user2@domain.com");

        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("user2@domain.com");
        email.Subject = "HelloWorld";
        email.Body = new MessageBody("Sent by using the EWS Managed API");

        //save it first!
        email.Save(new FolderId(WellKnownFolderName.Drafts, "user1@domain.com"));

        email.Send();

я использовал его, чтобы избежать этой ошибки: "Когда вы делаете запрос как учетная запись, у которой нет почтового ящика, вы должны указать основной SMTP-адрес почтового ящика для любых выделенных идентификаторов папок".

Другие вопросы по тегам