Неверные элементы почтового ящика извлекаются с помощью управляемого 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);
Ответы
Ответ 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-адрес почтового ящика для любых идентификаторов выделенной папки."