Надстройка Outlook не может добавлять вложения к сообщению

Попытка добавить вложение к сообщению электронной почты из надстройки Outlook возвращает следующую ошибку:

status: failed
code:9007    
message:"The attachment cannot be added to the item."    
name:"AttachmentUploadGeneralFailure"

Это происходит при использовании Outlook в Интернете в любом браузере. В клиентах Outlook 2013/2016 для настольных ПК вложение успешно добавлено.

Файл размещен в том же домене, где запущена надстройка, с использованием HTTPS и действующего сертификата (не самозаверяющего). Не работает и при использовании HTTP вместо HTTPS. Я могу загрузить файл, введя URL-адрес в браузере. На сервер не поступает запрос «GET» для загрузки вложения.

Кажется, проблема связана с моим веб-сервером. Если я попытаюсь прикрепить случайный файл из Интернета, все будет нормально.

Обновление: файл доступен только аутентифицированному пользователю надстройки. Это не является общедоступным. Наверное, поэтому это не работает. Есть ли способ обойти это?

mailbox.item.addFileAttachmentAsync(
    attachmentUrl,
    fileName,
    function (result) {
        if (result.status === Office.AsyncResultStatus.Failed) {
            console.log(result.error.message);
        }
    });

person Bart Loos    schedule 15.09.2017    source источник


Ответы (1)


Проблема в том, что ваш файл требует аутентификации.

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

Однако в OWA attachmentUrl отправляется на сервер для загрузки. Поскольку Сервер не аутентифицирован, файл недоступен, не может загрузить и прикрепить его к сообщению.

Один из возможных обходных путей - предоставить временный URI, который общедоступен, но действует только в течение короткого времени. Вот как Microsoft Graph API обрабатывает загрузку файлов из OneDrive. Он генерирует URI, который можно использовать только один раз, и он самоуничтожается через пару минут.

Другой вариант - использовать посредника, например Хранилище блогов Azure для размещения файлов и использования подписи общего доступа, чтобы обезопасить доступ к файлу. В зависимости от количества и размера ваших файлов, это может быть очень недорогое решение, позволяющее избежать развертывания собственного решения (например, копейки за гигабайт являются недорогими).

person Marc LaFleur    schedule 15.09.2017
comment
Спасибо, вот что я подозревал. Я рассмотрю ваши предложения по решению этой проблемы. - person Bart Loos; 16.09.2017