2016-06-08 4 views
2

Если у меня есть сообщение с вложением .eml (i.e. message/rfc822) в моем почтовом ящике, fetching the message via the REST API возвращает сообщение с одним ItemAttachment. То, что ItemAttachment инкапсулирует Microsoft.OutlookServices.Message, представляющий вложенное сообщение. Приложенный объект Message имеет нуль Id, поэтому мы не можем его получить напрямую. Но что, если мы хотим получить содержимое одного из его вложений?Получение вложений в прикрепленных сообщениях через API REST Outlook

Message in Inbox 
    \--> Attachments 
    \--> ItemAttachment 
     \--> Item 
      \--> Attachments 
       \--> FileAttachment <-- (want the content of this) 

Это второй уровень FileAttachment имеет @odata.id из:

https://outlook.office.com/api/beta/Users('[email protected]7f0b2a1fa')/('')/Attachments('AAMkAGQ3MzU1BBc2LWFjNTItNDk4Mi1iZTdlLTM3NGM0NzY5NTNmYgBGAAAAAACI4ZQOxnCPTpOe8P6IYO9gBwA_fgVM0BybQ5W_noJvz6hgAAAAAAEMAAA_fgVM0BybQ5W_noJvz6hgAAB2hYE9AAACEgAQAA_BBM8zEqJPrcr4BJ-cOyUSABAAlLV-2suqwEGuRduQ43E9pg==')

Но любые попытки принести этот объект не удастся из-за недостающего message_id сегмента пути:

{"error":{"code":"RequestBroker-ParseUri","message":"Empty segment encountered in request URL. Please make sure that a valid request URL is specified."}}

Как я могу получить содержимое этого приложения?

ответ

0

В настоящее время API REST Outlook не поддерживает получение вложения из (файла/элемента) вложения сообщения. Однако, основываясь на link, которые вы предоставляете в сообщении, MSFT, похоже, уже считает, что добавить эту функцию.

И в вашем сценарии вы хотите получить вложение из сообщения a (формат .eml), который является приложением сообщения b. На самом деле «.eml» - это прикрепление файла, а не вложение элемента. Это означает, что было бы не удалось событие, когда мы пытаемся расширить его с помощью REST ниже:

GET: https://outlook.office.com/api/v2.0/me/MailFolders/Inbox/messages/{messageID}/attachments/{attachmentId}?$expand=Microsoft.OutlookServices.ItemAttachment/Item 

Это просто возвращает тот же результат, мы получаем вложение непосредственно, как показано ниже: enter image description here

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

И ошибка в 'RequestBroker-ParseUri', у вас есть сегмент сообщений в @ odata.id? Правильна @ odata.id должен быть как:

@ odata.id = https://outlook.office.com/api/v1.0/Users ('имя пользователя @ tenant.onmicrosoft.com')/сообщения (AAAAFFtq ... JFAAA = ')/Вложения (АААА ... InxVMOHvBDM0 = ')

Update

Message-> 
     Item attachment(eml)-> 
           File attachment 

Чтобы получить содержимое вложенного файла прикрепления элемента, мы можем расширить вложение элемента с помощью REST API ниже:

GET: https://outlook.office.com/api/beta/me/mailfolders/inbox/messages/{messageId}/attachments?$expand=Microsoft.OutlookServices.ItemAttachment/Item 

Ответ: enter image description here

Тогда мы можем получить содержимое файла вложения непосредственно через «ContentBytes».

+0

Я был бы очень рад получить FileAttachment и разобрать его сам. Эти случаи достаточно редки, что это не проблема. Но я не получаю FileAttachment. Я использую бета-API и получаю '@ @ odata.type ':« #Microsoft.OutlookServices.ItemAttachment "," @ odata.id ":" https://outlook.office.com/api/beta/Users('[email protected]7f0b2a1fa ')/Messages ('AAMkAGQ3MzU1YTc2L ...')/Attachments ('AAMkAGQ3MzU ...') "' – dkarp

+0

Спасибо за исправление. После использования API бета-версии я смог получить вложение «eml» в качестве вложения элементов и может воспроизвести проблему, как вы описали ниже идентификатор ошибки возврата файла. В этом случае мы можем развернуть вложение исходного сообщения, чтобы получить содержимое прикрепленного файла вложения. Я обновляю это предложение выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^