Получение вложений элемента Outlook с сервера

Получение вложений элемента Outlook с сервера

Вы можете получить вложения элемента Outlook несколькими способами, но какой вариант вы используете, зависит от вашего сценария.

Отправьте сведения о вложении в удаленную службу.

Ваша надстройка может использовать API вложений для отправки сведений о вложениях в удаленную службу. Затем эта служба может обратиться напрямую к серверу Exchange для получения вложений.

Используйте API getAttachmentContentAsync , доступный из набора требований 1.8. Поддерживаемые форматы: AttachmentContentFormat.

Этот API может быть удобен, если EWS/REST недоступен (например, из-за конфигурации администратора вашего сервера Exchange), или ваша надстройка хочет использовать контент base64 непосредственно в HTML или JavaScript. Кроме того, getAttachmentContentAsync API доступен в сценариях, в которых вложение еще не синхронизировано с Exchange; см. в статье Управление вложениями элемента в форме сложения в Outlook, чтобы узнать больше.

В этой статье подробно извеется о первом варианте. Чтобы отправить сведения о вложении в удаленную службу, используйте следующие свойства и функции.

Свойство Office.context.mailbox.ewsUrl: предоставляет URL-адрес веб-служб Exchange (EWS) на сервере Exchange Server, на котором размещен почтовый ящик. Служба использует этот URL-адрес, чтобы вызвать метод ExchangeService.GetAttachments или операцию GetAttachment для EWS.

Свойство Office.context.mailbox.item.attachments: получает массив объектов AttachmentDetails (по одному для каждого вложения в элемент).

Функция Office.context.mailbox.getCallbackTokenAsync: асинхронно вызывает сервер Exchange Server с почтовым ящиком, чтобы получить маркер обратного вызова, который клиентский сервер отправит обратно на сервер Exchange Server для проверки подлинности запроса на получение вложения.

Использование API вложений

Чтобы использовать API вложений для получения вложений из Exchange почтового ящика, выполните следующие действия.

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

Получите маркер обратного вызова с сервера Exchange.

Отправьте маркер обратного вызова и сведения о вложениях в удаленную службу.

Получите вложения с сервера Exchange с помощью метода ExchangeService.GetAttachments или операции GetAttachment .

Каждый из этих шагов рассматривается в следующих разделах более подробно на примере кода Outlook-Add-in-JavaScript-GetAttachments.

Код в этих примерах был сокращен, чтобы уделить основное внимание информации о вложениях. Пример содержит дополнительный код для проверки подлинности надстройки на удаленном сервере и управления состоянием запроса.

Получение маркера обратного вызова

Объект Office.context.mailbox предоставляет функцию getCallbackTokenAsync для получения маркера, с помощью которого удаленный сервер может пройти проверку подлинности на сервере Exchange Server. В приведенном ниже фрагменте кода показаны функция надстройки, отправляющая асинхронный запрос маркера обратного вызова, и функция обратного вызова, получающая ответ. Маркер обратного вызова хранится в объекте запроса к службе, определяемом в следующем разделе.

Отправка сведений о вложениях в удаленную службу

От удаленной службы, которую вызывает ваша надстройка, зависит способ отправки информации о вложениях в эту службу. В данном примере такой удаленной службой является приложение веб-API, созданное с помощью Visual Studio 2013. Удаленная служба ожидает получения сведений о вложениях в объекте JSON. Следующий код инициализирует объект, содержащий информацию о вложениях.

Свойство Office.context.mailbox.item.attachments содержит коллекцию объектов AttachmentDetails , по одному на каждое вложение в элементе. В большинстве случаев надстройке достаточно передать в удаленную службу свойство объекта AttachmentDetails , содержащее идентификатор вложения. Если удаленной службе нужно больше сведений о вложении, вы можете полностью или частично передать объект AttachmentDetails . Приведенный ниже код определяет метод, который помещает весь массив AttachmentDetails в объект serviceRequest и отправляет запрос в удаленную службу.

Получение вложений с сервера Exchange Server

Ваша удаленная служба может использовать метод GetAttachments управляемого API веб-служб Exchange или операцию GetAttachment управляемого API веб-служб Exchange для получения вложений с сервера. Приложению-службе необходимы два объекта, чтобы выполнить десериализацию строки JSON в объекты .NET Framework, которые можно использовать на сервере. В следующем коде показаны определения объектов десериализации.

Использование управляемого API EWS для получения вложений

Если вы используете в своей удаленной службе управляемый API EWS, вы можете воспользоваться методом GetAttachments, который создаст, отправит и получит SOAP-запрос EWS для получения вложений. Рекомендуем использовать управляемый API EWS, поскольку он требует меньше строк кода и обеспечивает более интуитивный интерфейс для вызовов EWS. Приведенный ниже код отправляет один запрос на получение всех вложений, а также возвращает количество и имена обработанных вложений.

Использование EWS для получения вложений

Если в удаленной службе используется EWS, для получения вложений с сервера Exchange Server необходимо создать SOAP-запрос GetAttachment. Приведенный ниже код возвращает строку, представляющую SOAP-запрос. Удаленная служба вставляет в строку идентификатор вложения, используя метод String.Format .

Приведенный ниже метод получает вложения с сервера Exchange Server, использует запрос EWS GetAttachment . При такой реализации отправляется отдельный запрос для каждого вложения и возвращается количество обработанных вложений. Каждый ответ обрабатывается в отдельном методе ProcessXmlResponse , определение которого представлено ниже.

Каждый ответ на операцию GetAttachment отправляется в метод ProcessXmlResponse . Этот метод проверяет ответ на наличие ошибок. Если ошибки не найдены, он обрабатывает вложенные файлы и элементы. Метод ProcessXmlResponse выполняет большую часть операций по обработке вложения.

📎📎📎📎📎📎📎📎📎📎