Подтвердить что ты не робот

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

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

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

    ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    ex.AutodiscoverUrl("[email protected]");

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

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

Ответ 1

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

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

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

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")), 
    new ItemView(10));

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

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("[email protected]");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]");
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

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

Ответ 2

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

        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new WebCredentials("user1", "1234", "domain.com");
        service.AutodiscoverUrl("[email protected]");

        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("[email protected]");
        email.Subject = "HelloWorld";
        email.Body = new MessageBody("Sent by using the EWS Managed API");

        //save it first!
        email.Save(new FolderId(WellKnownFolderName.Drafts, "[email protected]"));

        email.Send();

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