Вызов веб-служб из надстройки Outlook
Надстройка может использовать веб-службы Exchange (EWS) с компьютера под управлением Exchange Server, веб-службы, доступной на сервере, который предоставляет исходное расположение для пользовательского интерфейса надстройки, или веб-службы, доступной в Интернете. В этой статье приведен пример того, как надстройка Outlook может запрашивать данные из EWS.
Важно!
Устаревшие токены Exchange устарели. Начиная с октября 2024 г. устаревшие удостоверения пользователя Exchange и маркеры обратного вызова начнут отключать для клиентов Exchange Online. Временная шкала и сведения см. на странице часто задаваемых вопросов. Это часть инициативы Майкрософт по обеспечению безопасности в будущем, которая предоставляет организациям средства, необходимые для реагирования на текущую среду угроз. Маркеры удостоверений пользователей Exchange по-прежнему будут работать в локальной среде Exchange. Проверка подлинности вложенных приложений — это рекомендуемый подход к токенам в будущем.
Способ вызова веб-службы зависит от расположения веб-службы. В следующих таблицах перечислены различные способы вызова веб-службы в зависимости от расположения.
Расположение веб-службы | Способ вызова веб-службы |
---|---|
Сервер Exchange, на котором размещен почтовый ящик клиента | Используйте метод makeEwsRequestAsync для вызова операций EWS, поддерживаемых надстройками. Сервер Exchange Server, на котором размещен почтовый ящик, также предоставляет доступ к EWS. |
Веб-сервер, предоставляющий исходное расположение для пользовательского интерфейса надстроек. | Вызывайте веб-службу с помощью стандартных методик JavaScript. Код JavaScript в пределах пользовательского интерфейса работает в контексте веб-сервера, предоставляющего пользовательский интерфейс. Поэтому он сможет вызывать веб-службы на этом сервере, не создавая ошибки межсайтового скрипта. |
Все другие расположения | Создайте прокси для веб-службы на веб-сервере, предоставляющем исходное расположение для пользовательского интерфейса. Если не указать прокси, надстройка не запустится из-за ошибок межсайтовых сценариев. Один из способов указать такой прокси — это использовать JSON/P. Дополнительные сведения см. в разделе Конфиденциальность и безопасность надстроек Office. |
Получение доступа к операциям веб-служб Exchange с помощью метода makeEwsRequestAsync
Важно!
Вызовы и операции EWS не поддерживаются в надстройках, работающих в Outlook в Android и iOS.
С помощью метода mailbox.makeEwsRequestAsync вы можете отправить запрос EWS на сервер Exchange Server, на котором размещается почтовый ящик пользователя.
EWS поддерживает различные операции на сервере Exchange Server; например, операции на уровне элемента для копирования, поиска, обновления или отправки элемента, а также операции на уровне папки для создания, получения или обновления папки. Чтобы выполнить операцию EWS, создайте xml-запрос SOAP для этой операции. После завершения операции вы получите XML-ответ SOAP, содержащий данные, относящиеся к операции. Запросы и ответы EWS SOAP соответствуют схеме, определенной в файле Messages.xsd. Как и другие файлы схемы EWS, файл Message.xsd находится в виртуальном каталоге IIS, где размещается EWS.
Чтобы использовать makeEwsRequestAsync
метод для запуска операции EWS, укажите следующее:
XML-код для запроса SOAP для этой операции EWS в качестве аргумента для параметра data
Функция обратного вызова (в качестве аргумента обратного вызова )
Любые необязательные входные данные для этой функции обратного вызова (в качестве аргумента userContext )
После завершения запроса SOAP EWS Outlook вызывает функцию обратного вызова с одним аргументом, который является объектом AsyncResult . Функция обратного вызова может получить доступ к двум свойствам AsyncResult
объекта: свойству value
, которое содержит XML-ответ SOAP операции EWS, и, при необходимости, к свойству asyncContext
, которое содержит все данные, переданные в userContext
качестве параметра. Как правило, функция обратного вызова анализирует XML-код в ответе SOAP, чтобы получить любую соответствующую информацию, и обрабатывает эти сведения соответствующим образом.
Советы по анализу ответов веб-служб Exchange
При анализе ответа SOAP от операции EWS обратите внимание на следующие проблемы, зависящие от браузера.
Укажите префикс для имени тега при использовании метода
getElementsByTagName
DOM , чтобы включить поддержку Internet Explorer и веб-представления Trident.getElementsByTagName
поведение по-разному в зависимости от типа браузера. Например, ответ EWS может содержать следующий XML-код (отформатированный и сокращенный для отображения).<t:ExtendedProperty><t:ExtendedFieldURI PropertySetId="00000000-0000-0000-0000-000000000000" PropertyName="MyProperty" PropertyType="String"/> <t:Value>{ ... }</t:Value></t:ExtendedProperty>
Код, как показано ниже, будет работать в браузере, например Chrome, чтобы получить XML-код, заключенный в
ExtendedProperty
теги.const mailbox = Office.context.mailbox; mailbox.makeEwsRequestAsync(mailbox.item.itemId, function(result) { const response = $.parseXML(result.value); const extendedProps = response.getElementsByTagName("ExtendedProperty") });
Для веб-представления Trident (Internet Explorer) необходимо включить
t:
префикс имени тега, как показано ниже.const mailbox = Office.context.mailbox; mailbox.makeEwsRequestAsync(mailbox.item.itemId, function(result) { const response = $.parseXML(result.value); const extendedProps = response.getElementsByTagName("t:ExtendedProperty") });
Используйте свойство
textContent
DOM, чтобы получить содержимое тега в ответе EWS, как показано ниже.content = $.parseJSON(value.textContent);
Другие свойства, например,
innerHTML
могут не работать в веб-представлении Trident (Internet Explorer) для некоторых тегов в ответе EWS.
Пример
В следующем примере вызывается makeEwsRequestAsync
использование операции GetItem для получения темы элемента. Этот пример включает следующие три функции.
getSubjectRequest
— принимает идентификатор элемента в качестве входных данных и возвращает XML-код для запроса SOAP для вызоваGetItem
указанного элемента.sendRequest
— вызываетсяgetSubjectRequest
для получения запроса SOAP для выбранного элемента, а затем передает запрос SOAP и функцию обратного вызова ,callback
чтобыmakeEwsRequestAsync
получить тему указанного элемента.callback
— обрабатывает ответ SOAP, содержащий любую тему и другие сведения о указанном элементе.
function getSubjectRequest(id) {
// Return a GetItem operation request for the subject of the specified item.
const result =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"' +
' xmlns:xsd="https://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>' +
' <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />' +
' </soap:Header>' +
' <soap:Body>' +
' <GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">' +
' <ItemShape>' +
' <t:BaseShape>IdOnly</t:BaseShape>' +
' <t:AdditionalProperties>' +
' <t:FieldURI FieldURI="item:Subject"/>' +
' </t:AdditionalProperties>' +
' </ItemShape>' +
' <ItemIds><t:ItemId Id="' + id + '"/></ItemIds>' +
' </GetItem>' +
' </soap:Body>' +
'</soap:Envelope>';
return result;
}
function sendRequest() {
// Create a local variable that contains the mailbox.
const mailbox = Office.context.mailbox;
mailbox.makeEwsRequestAsync(getSubjectRequest(mailbox.item.itemId), callback);
}
function callback(asyncResult) {
const result = asyncResult.value;
const context = asyncResult.context;
// Process the returned response here.
}
Операции веб-служб Exchange, которые надстройки поддерживают
Надстройки Outlook могут получить доступ к подмножествию операций, доступных в EWS, с помощью makeEwsRequestAsync
метода . Если вы не знакомы с операциями EWS и как использовать makeEwsRequestAsync
метод для доступа к операции, начните с примера запроса SOAP, чтобы настроить аргумент данных .
Ниже описано, как можно использовать makeEwsRequestAsync
метод .
В XML-коде замените все идентификаторы элементов и релевантные атрибуты операций EWS на соответствующие значения.
Добавьте запрос SOAP в качестве аргумента для параметра
makeEwsRequestAsync
данных .Укажите функцию обратного вызова и вызовите
makeEwsRequestAsync
.В функции обратного вызова проверьте результаты операции в ответе SOAP.
Используйте результаты операции EWS в соответствии с вашими потребностями.
В следующей таблице указаны операции EWS, которые надстройки поддерживают. Чтобы просмотреть примеры SOAP-запросов и SOAP-ответов, выберите ссылку для каждой операции. Дополнительные сведения об операциях EWS см. в разделе Операции EWS в Exchange.
Операция EWS | Описание |
---|---|
Операция CopyItem | Копирует выбранные элементы и размещает новые элементы в выделенной папке в хранилище Exchange. |
Операция CreateFolder | Создает папки в выбранном расположении в хранилище Exchange. |
Операция CreateItem | Создает заданные элементы в хранилище Exchange. |
Операция ExpandDL | Отображает полное членство списков рассылки. |
Операция FindConversation | Перечисляет список бесед в определенной папке в хранилище Exchange. |
Операция FindFolder | Ищет вложенные папки заданной папки и возвращает набор свойств, описывающих вложенные папки. |
Операция FindItem | Определяет элементы, расположенные в определенной папке в хранилище Exchange. |
Операция GetConversationItems | Получает один или несколько наборов элементов, упорядоченных в узлы в беседе. |
Операция GetFolder | Получает определенные свойства и содержимое папок из хранилища Exchange. |
Операция GetItem | Получает определенные свойства и содержимое элементов из хранилища Exchange. |
Операция GetUserAvailability | Предоставляет подробные сведения о доступности наборов пользователей, помещений и ресурсов в рамках определенного периода времени. |
Операция MarkAsJunk | Перемещает сообщения электронной почты в папку "Нежелательная почта" и соответствующим образом добавляет или удаляет отправителей сообщений в списке заблокированных отправителей. |
Операция MoveItem | Перемещает элементы в одну целевую папку в хранилище Exchange. |
Операция ResolveNames | Сопоставляет неоднозначные адреса электронной почты и отображает имена. |
Операция SendItem | Отправляет сообщения электронной почты, расположенные в хранилище Exchange. |
Операция UpdateFolder | Изменяет свойства существующих папок в хранилище Exchange. |
Операция UpdateItem | Изменяет свойства существующих элементов в хранилище Exchange. |
Примечание.
Элементы FAI (сведения, связанные с папками) нельзя обновлять (или создавать) из надстройки. Эти скрытые сообщения находятся в папке и используются для хранения различных параметров и вспомогательных данных. При попытке использовать операцию UpdateItem возникнет ошибка ErrorAccessDenied: "У расширения Office нет разрешения на обновление такого элемента". В качестве альтернативы можно использовать управляемый API служб EWS для обновления этих элементов в клиентском или серверном приложении для Windows. Рекомендуем соблюдать осторожность, так как внутренние структуры данных для служб могут меняться и сделать решение неработоспособным.
Разрешения и проверка подлинности для makeEwsRequestAsync
При использовании makeEwsRequestAsync
метода проверка подлинности запроса выполняется с использованием учетных данных учетной записи электронной почты текущего пользователя. Метод makeEwsRequestAsync
управляет учетными данными для вас, чтобы вам не нужно было предоставлять учетные данные проверки подлинности в запросе.
Примечание.
Администратор сервера должен использовать командлет New-WebServicesVirtualDirectory или Set-WebServicesVirtualDirectory , чтобы задать параметру OAuthAuthentication значение true
в каталоге EWS сервера клиентского доступа, чтобы разрешить makeEwsRequestAsync
методу выполнять запросы EWS.
Чтобы использовать метод, надстройка makeEwsRequestAsync
должна запросить разрешение на чтение и запись почтового ящика в манифесте. Разметка зависит от типа манифеста.
- Манифест только надстройки<. Задайте для элемента Permissions> значение ReadWriteMailbox.
- Унифицированный манифест для Microsoft 365: задайте для свойства name объекта в массиве authorization.permissions.resourceSpecific значение Mailbox.ReadWrite.User.
Сведения об использовании разрешения на чтение и запись почтового ящика см. в разделе Разрешение на чтение и запись почтового ящика.
См. также
- Конфиденциальность и безопасность надстроек для Office
- Работа с ограничениями по принципу одинакового источника в надстройках Office
- Справка по службам EWS для Exchange
- Приложения электронной почты для Outlook и служб EWS в Exchange
Сведения о создании серверных служб для надстроек с помощью веб-API ASP.NET см. ниже.
Office Add-ins