У меня проблема с идентификаторами вложений в пересылаемых письмах / письмах в потоке.
При получении вложений из "исходного / исходного" сообщения электронной почты (как встроенных, так и обычных вложений) я могу успешно получить содержимое вложения из веб-службы EWS, запросив идентификатор вложения у Office.context.mailbox.item.attachments
Когда я пытаюсь получить те же вложения из перенаправленной версии электронного письма, я получаю «Указанный идентификатор вложения недействителен.ErrorInvalidAttachmentId0» для каждого вложения в электронном письме. Если я пересылаю электронное письмо и добавляю к нему дополнительное вложение перед отправкой, я получаю содержимое вложения только для «дополнительного» вложения, а не для каких-либо исходных вложений.
Ошибка возникает только в настольном клиенте Outlook. (версия 16.0.6366.2062). Проблема не существует в OWA при использовании Chrome или Internet Explorer.
Это код, который мой API использует для вызова EWS.
string getAttachmentRequest =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""
xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">
<soap:Header>
<t:RequestServerVersion Version=""Exchange2013"" />
</soap:Header>
<soap:Body>
<GetAttachment xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages""
xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">
<AttachmentShape/>
<AttachmentIds>
<t:AttachmentId Id=""{0}""/>
</AttachmentIds>
</GetAttachment>
</soap:Body>
</soap:Envelope>";
getAttachmentRequest = String.Format(getAttachmentRequest, attachmentId);
// Prepare a web request object.
HttpWebRequest webRequest = WebRequest.CreateHttp(ewsUrl);
webRequest.Headers.Add("Authorization", string.Format("Bearer {0}", authToken));
webRequest.PreAuthenticate = true;
webRequest.AllowAutoRedirect = false;
webRequest.Method = "POST";
webRequest.ContentType = "text/xml; charset=utf-8";
// Construct the SOAP message for the GetAttchment operation.
byte[] bodyBytes = System.Text.Encoding.UTF8.GetBytes(getAttachmentRequest);
webRequest.ContentLength = bodyBytes.Length;
Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(bodyBytes, 0, bodyBytes.Length);
requestStream.Close();
// Make the request to the Exchange server and get the response.
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();