Как запросить почтовый сервер Exchange для элементов электронной почты?

Я пытаюсь обновить существующее приложение, которое читает Exchange 2003 с помощью WebDAV. Почтовый сервер должен быть обновлен до Exchange 2013, поэтому я проверяю, как я могу использовать EWS.

У меня проблема в том, что, хотя я знаю, что в папке "Входящие" есть непрочитанные элементы с вложениями, запрос, который я запускаю против объекта FindItems возвращается пустым...

Вот мой фрагмент кода:

private static void GetAttachments(ExchangeService service)
{
 // Return a single item.
 ItemView view = new ItemView(100);
 ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);// .Exchange2007_SP1);

 service.UseDefaultCredentials = true;
 service.AutodiscoverUrl("[removed_email]al", RedirectionUrlValidationCallback);

 ItemView view = new ItemView(1);

 string querystring = "HasAttachments:true Subject:'ATTACHMENT TEST' Kind:email";

 // Find the first email message in the Inbox that has attachments. 
 // This results in a FindItem operation call to EWS.
 FindItemsResults<item> results = service.FindItems(WellKnownFolderName.Inbox, querystring, view);

 //FindItemsResults<item> results = service.FindItems(WellKnownFolderName.Inbox, new ItemView(50));

 if (results.TotalCount > 0)
 {
 // looping through all the emails
 for (Int16 iDx = 0; iDx < results.TotalCount-1; iDx++)
 {

 EmailMessage email = results.Items[iDx] as EmailMessage;

 if (email.IsRead == false) { 

 // Request all the attachments on the email message. This results in a GetItem operation call to EWS.
 email.Load(new PropertySet(EmailMessageSchema.Attachments));

 foreach (Attachment attachment in email.Attachments)
 {
 if (attachment is FileAttachment)
 {
 FileAttachment fileAttachment = attachment as FileAttachment;
</item></item>

То, что я должен делать, - это прочитать все непрочитанные письма в целевом почтовом ящике (только один сервер Exchange) и взять вложения на диск, чтобы затем добавить их в виде вложений в качестве новых случаев в SalesForce.

Где я иду не так?

Кроме того, эта строка:

ItemView view = new ItemView(100);

был:

ItemView view = new ItemView(1);

Конечно, это будет искать только один элемент электронной почты, верно?

1 ответ

Я представил следующий XML и получил ожидаемые результаты. Самый простой способ выяснить, что происходит, - это посмотреть на XML.

<!--?xml version="1.0" encoding="utf-8"?-->
<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
 <soap:header>
 <t:requestserverversion version="Exchange2010_SP2">
 </t:requestserverversion></soap:header>
<soap:body>
 <finditem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" traversal="Shallow">
 <itemshape>
 <t:baseshape>IdOnly</t:baseshape>
 </itemshape>
 <parentfolderids>
 <t:distinguishedfolderid id="inbox">
 </t:distinguishedfolderid></parentfolderids>
 <querystring>HasAttachments:true Subject:'ATTACHMENT TEST' Kind:email</querystring>
 </finditem>
 </soap:body>
</soap:envelope>

licensed under cc by-sa 3.0 with attribution.