Управление вложениями элемента в форме создания в Outlook
API JavaScript для Office предоставляет несколько API для управления вложениями элемента, когда пользователь создает сообщение или встречу.
Вложение файла или элемента Outlook
Вложите файл или элемент Outlook в форму создания с помощью метода, подходящего для типа вложения.
addFileAttachmentAsync: вложение файла.
Примечание.
Метод
addFileAttachmentAsync
появился в наборе требований 1.1 для Outlook в Windows (классической) и на Mac.addFileAttachmentAsync
Поддержка в Outlook в Интернете и новых Outlook для Windows появилась в наборе требований 1.8.addFileAttachmentFromBase64Async: вложите файл с помощью строки в кодировке Base64.
addItemAttachmentAsync: присоединение элемента Outlook.
Это асинхронные методы, что означает, что выполнение может продолжаться, не дожидаясь завершения действия. В зависимости от исходного расположения и размера добавляемого вложения асинхронный вызов может занять некоторое время.
Если есть задачи, которые зависят от выполняемого действия, их следует выполнять в функции обратного вызова. Эта функция обратного вызова является необязательной и вызывается по завершении отправки вложения. Функция обратного вызова принимает объект AsyncResult в качестве выходного параметра, который предоставляет любое состояние, ошибку и возвращаемое значение при добавлении вложения. Если для обратного вызова требуются дополнительные параметры, их можно указать в необязательном параметре options.asyncContext
.
options.asyncContext
может иметь любой тип, который ожидает функция обратного вызова.
Например, можно определить options.asyncContext
как объект JSON, содержащий одну или несколько пар "ключ-значение". Дополнительные примеры передачи необязательных параметров асинхронным методам на платформе надстроек Office см. в разделе Асинхронное программирование в надстройках Office. В следующем примере показано, как использовать asyncContext
параметр для передачи двух аргументов в функцию обратного вызова.
const options = { asyncContext: { var1: 1, var2: 2 } };
Office.context.mailbox.item.addFileAttachmentAsync("https://contoso.com/rtm/icon.png", "icon.png", options, callback);
Чтобы проверка для результата асинхронного вызова метода в функции обратного AsyncResult
вызова, используйте status
свойства и error
объекта . Если присоединение завершается успешно, используйте AsyncResult.value
свойство , чтобы получить идентификатор вложения. Это целое число, которое можно использовать в дальнейшем, чтобы удалить вложение.
Примечание.
Идентификатор вложения действителен только в рамках одного сеанса и не гарантированно сопоставляется с тем же вложением в разных сеансах. Примеры завершения сеанса включают в себя, когда пользователь закрывает надстройку или если пользователь начинает создавать в встроенной форме и затем открывает встроенную форму, чтобы продолжить работу в отдельном окне.
Совет
Существуют ограничения на файлы или элементы Outlook, которые можно вложить в почтовый элемент, например количество вложений и их размер. Дополнительные рекомендации см. в разделе Ограничения для API JavaScript.
Вложение файла
Файл можно вложить в сообщение или встречу в форме создания, используя addFileAttachmentAsync
метод и указав универсальный код ресурса (URI) файла. Можно также использовать addFileAttachmentFromBase64Async
метод , указав строку в кодировке Base64 в качестве входных данных. Если файл защищен, можно добавить соответствующее удостоверение или токен проверки подлинности как параметр строки запроса URI. Exchange вызовет URI, чтобы получить вложение, а веб-службе, которая защищает файл, потребуется использовать токен для проверки подлинности.
Примечание.
Универсальный код ресурса (URI) присоединяемого файла должен поддерживать кэширование в рабочей среде. Сервер, на котором размещен образ, не должен возвращать заголовок, указывающий Cache-Control
no-cache
, no-store
или аналогичные параметры в HTTP-ответе. Однако при разработке надстройки и внесении изменений в файлы кэширование может помешать просмотру изменений. Мы рекомендуем использовать Cache-Control
заголовки во время разработки.
Следующий пример JavaScript — это надстройка создания, которая присоединяет файл picture.pngс веб-сервера к создаваемому сообщению или встрече. Функция обратного вызова принимает asyncResult
в качестве параметра, проверяет состояние результата и получает идентификатор вложения в случае успешного выполнения метода.
// Add the specified file attachment to the item
// being composed.
// When the attachment finishes uploading, the
// callback function is invoked and gets the attachment ID.
// You can optionally pass any object that you would
// access in the callback function as an argument to
// the asyncContext parameter.
Office.context.mailbox.item.addFileAttachmentAsync(
"https://webserver/picture.png",
"picture.png",
{ asyncContext: { var1: 1, var2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.error(asyncResult.error.message);
return;
}
// Get the ID of the attached file.
const attachmentID = asyncResult.value;
console.log(`ID of added attachment: ${attachmentID}`);
}
);
Чтобы добавить встроенное изображение в кодировке Base64 в текст создаваемого сообщения или встречи, необходимо сначала получить текущий текст элемента с помощью Office.context.mailbox.item.body.getAsync
метода , прежде чем вставлять изображение с помощью addFileAttachmentFromBase64Async
метода . В противном случае изображение не будет отображаться в тексте после вставки. Инструкции см. в следующем примере JavaScript, который добавляет встроенное изображение Base64 в начало текста элемента.
const mailItem = Office.context.mailbox.item;
const base64String =
"iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg==";
// Get the current body of the message or appointment.
mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => {
if (bodyResult.status === Office.AsyncResultStatus.Failed) {
console.error(bodyResult.error.message);
return;
}
// Insert the Base64-encoded image at the beginning of the body.
const options = { isInline: true, asyncContext: bodyResult.value };
mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => {
if (attachResult.status === Office.AsyncResultStatus.Failed) {
console.error(attachResult.error.message);
return;
}
let body = attachResult.asyncContext;
body = body.replace("<p class=MsoNormal>", `<p class=MsoNormal><img src="cid:sample.png">`);
mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => {
if (setResult.status === Office.AsyncResultStatus.Failed) {
console.error(setResult.error.message);
return;
}
console.log("Inline Base64 image added to the body.");
});
});
});
Присоединение элемента Outlook
Чтобы вложить элемент Outlook (например, электронную почту, календарь или элемент контакта) к сообщению или встрече в форме создания, укажите идентификатор веб-служб Exchange (EWS) элемента и используйте addItemAttachmentAsync
метод . Чтобы получить идентификатор EWS элемента, используйте свойство item.itemId .
Следующая функция addItemAttachment
JavaScript расширяет предыдущий пример и добавляет элемент в виде вложения в создаваемое сообщение электронной почты или встречу. Функция принимает идентификатор EWS элемента для присоединения в качестве аргумента. Если присоединение выполнено успешно, он получает идентификатор вложения для дальнейшей обработки.
// Adds the specified item as an attachment to the composed item.
// ID is the EWS ID of the item to be attached.
function addItemAttachment(itemId) {
// When the attachment finishes uploading, the
// callback function is invoked. Here, the callback
// function uses only asyncResult as a parameter,
// and if the attaching succeeds, gets the attachment ID.
// You can optionally pass any other object you wish to
// access in the callback function as an argument to
// the asyncContext parameter.
Office.context.mailbox.item.addItemAttachmentAsync(
itemId,
"Welcome email",
{ asyncContext: { var1: 1, var2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.error(asyncResult.error.message);
return;
}
const attachmentID = asyncResult.value;
console.log(`ID of added attachment: ${attachmentID}`);
}
);
}
Примечание.
Надстройку создания можно использовать для подключения экземпляра повторяющейся встречи в Outlook в Интернете, на мобильных устройствах или в новом Outlook в Windows. Однако в поддерживаемом клиенте Outlook в Windows или mac попытка подключения экземпляра приведет к присоединению повторяющегося ряда (родительской встречи).
Получение вложений
В наборе требований 1.8 доступны следующие API для получения вложений в режиме создания.
Используйте метод getAttachmentsAsync , чтобы получить вложения создаваемого сообщения или встречи.
Чтобы получить содержимое вложения, используйте метод getAttachmentContentAsync . Поддерживаемые форматы перечислены в перечислении AttachmentContentFormat .
Необходимо указать функцию обратного вызова для проверка состояния и любой ошибки с помощью объекта выходного AsyncResult
параметра. Вы также можете передать любые дополнительные параметры в функцию обратного вызова с помощью необязательного asyncContext
параметра.
Следующий пример JavaScript получает вложения и позволяет настроить отдельную обработку для каждого поддерживаемого формата вложений.
const item = Office.context.mailbox.item;
const options = { asyncContext: { currentItem: item } };
item.getAttachmentsAsync(options, callback);
function callback(result) {
if (result.value.length > 0) {
for (let i = 0 ; i < result.value.length ; i++) {
result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback);
}
}
}
function handleAttachmentsCallback(result) {
// Parse string to be a url, an .eml file, a Base64-encoded string, or an .icalendar file.
switch (result.value.format) {
case Office.MailboxEnums.AttachmentContentFormat.Base64:
// Handle file attachment.
break;
case Office.MailboxEnums.AttachmentContentFormat.Eml:
// Handle email item attachment.
break;
case Office.MailboxEnums.AttachmentContentFormat.ICalendar:
// Handle .icalender attachment.
break;
case Office.MailboxEnums.AttachmentContentFormat.Url:
// Handle cloud attachment.
break;
default:
// Handle attachment formats that are not supported.
}
}
Совет
Если клиент Outlook, в котором запущена надстройка, не поддерживает набор обязательных почтовых ящиков 1.8, вы по-прежнему можете получить вложение и его содержимое из элемента, создаваемого с помощью Microsoft Graph или EWS. Дополнительные сведения см. в статье Получение вложений элемента Outlook из Exchange.
Удаление вложения
Чтобы удалить файл или вложение элемента из сообщения или встречи в форме создания, укажите соответствующий идентификатор вложения в методе removeAttachmentAsync .
Важно!
Если вы используете набор требований 1.7 или более ранней версии, следует удалять только вложения, добавленные той же надстройкой в том же сеансе.
addFileAttachmentAsync
Как и методы , addItemAttachmentAsync
иgetAttachmentsAsync
, removeAttachmentAsync
является асинхронным методом. Необходимо указать функцию обратного вызова для проверка состояния и любой ошибки с помощью объекта выходного AsyncResult
параметра. Вы также можете передать любые дополнительные параметры в функцию обратного вызова с помощью необязательного asyncContext
параметра.
Следующая функция JavaScript продолжает removeAttachment
расширять приведенные выше примеры и удаляет указанное вложение из создаваемого сообщения электронной почты или встречи. В качестве аргумента функция принимает идентификатор вложения, которое требуется удалить. Идентификатор вложения можно получить после успешного addFileAttachmentAsync
вызова метода , addFileAttachmentFromBase64Async
или addItemAttachmentAsync
и использовать его в последующем removeAttachmentAsync
вызове метода. Вы также можете вызвать ( getAttachmentsAsync
впервые появилось в наборе требований 1.8), чтобы получить вложения и их идентификаторы для этого сеанса надстройки.
// Removes the specified attachment from the composed item.
function removeAttachment(attachmentId) {
// When the attachment is removed, the callback function is invoked.
// Here, the callback function uses an asyncResult parameter and
// gets the ID of the removed attachment if the removal succeeds.
// You can optionally pass any object you wish to access in the
// callback function as an argument to the asyncContext parameter.
Office.context.mailbox.item.removeAttachmentAsync(
attachmentId,
{ asyncContext: null },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.error(asyncResult.error.message);
return;
}
console.log(`Removed attachment with the ID: ${asyncResult.value}`);
}
);
}
Совет
Метод removeAttachmentAsync
не удаляет встроенные вложения из почтового элемента. Чтобы удалить встроенное вложение, сначала получите текст элемента, а затем удалите все ссылки на вложение из его содержимого. Используйте API Office.Body , чтобы получить и задать текст элемента.
См. также
Office Add-ins