Outlook 插件上传 FileReference 作为附件

问题描述

我正在开发一个 Outlook 插件,当用户撰写消息时,该插件需要上传的不是文件附件而是参考文件

我尝试使用这 3 种方法

  1. addFileAttachmentAsync(uri,attachmentName,[options],[回调])
  2. addItemAttachmentAsync(itemId,[选项]、[回调])
  3. makeEwsRequestAsync(data,callback,[userContext])

三种方法的结果:

  1. 无法添加引用文件
  2. MessageText":"您不能附加自己。","ResponseCode":"ErrorCannotAttachSelf","ResponseClass":"Error"}]}}}
  3. HTTP 500 错误

第二种方法代码

var messageId = await getMessageItemId();
var exchangeAttachment = await uploadAttachmentToExchange(accesstoken,messageId,attachment.name,fileUploaded.webUrl);
await addReferenceAttachment(exchangeAttachment.id,attachment.name);

var uploadAttachmentToExchange = async function(accesstoken,fileName,fileUrl){
    var OneDriveURL = "https://graph.microsoft.com/beta/me/messages/"+messageId+"/attachments";
    var payload = JSON.stringify({ 
        "@odata.type": "#microsoft.graph.referenceAttachment","name": fileName,"sourceUrl": fileUrl,"providerType": "oneDriveBusiness","permission": "organizationEdit","isFolder" : false,"isInline" : false
    }) ;
    
    return new Promise((successCallback,failureCallback) => {
        $.ajax({
            method: "POST",contentType: 'application/json',dataType: 'json',headers: {
                'Authorization': 'Bearer '+ accesstoken
            },url: OneDriveURL,data : payload
        })
        .done(function( response ) {
            successCallback(response);
        })
        .fail(function(resultat,status,error) {
            failureCallback(resultat);
        });
    }); 
};

var getMessageItemId = async function(){
    return new Promise((successCallback,failureCallback) => {
        mailBoxItem.getItemIdAsync(function(asyncResult){
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                failureCallback(asyncResult.error.message);
            } else {
                successCallback(asyncResult.value);
            }
        });
    });  
};

var addReferenceAttachment = async function(itemId,attachmentName){
    return new Promise((successCallback,failureCallback) => {
        mailBoxItem.addItemAttachmentAsync(itemId,{},function(asyncResult){
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                failureCallback(asyncResult.error.message);
            } else {
                successCallback(asyncResult);
            }
        });
    });
};

第三种方法代码

var messageId = await getMessageItemId();
await uploadAttachmentUsingEWSAPI(messageId);

var uploadAttachmentUsingEWSAPI = async function (messageId){
    var request = 
    '<?xml version="1.0" encoding="utf-8"?>'+
    '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
    '               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"'+
    '               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"'+
    '               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">'
    '  <soap:Header>'
    '    <t:RequestServerVersion Version="Exchange2007_SP1" />'
    '    <t:TimeZoneContext>'
    '      <t:TimeZoneDeFinition Id="Central Standard Time" />'
    '    </t:TimeZoneContext>'
    '  </soap:Header>'
    '  <soap:Body>'
    '    <m:CreateAttachment>'
    '      <m:ParentItemId Id="'+ messageId +'" />'
    '      <m:Attachments>'
    '        <t:FileAttachment>'
    '          <t:Name>FileAttachment.txt</t:Name>'
    '          <t:Content>VGhpcyBpcyBhIGZpbGUgYXR0YWNobWVudC4=</t:Content>'
    '        </t:FileAttachment>'
    '      </m:Attachments>'
    '    </m:CreateAttachment>'
    '  </soap:Body>'
    '</soap:Envelope>';

    console.log(request);
    return sendEWSRequest(request);
};

var sendEWSRequest = async function(request){
    return new Promise((successCallback,failureCallback) => {
        Office.context.mailBox.makeEwsRequestAsync(request,function(asyncResult){
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                failureCallback(asyncResult.error.message);
            } else {
                successCallback(asyncResult);
            }
        });
    });
};

这三种方法都不起作用。 有没有办法上传这样的云附件? :

enter image description here

如果是,使用什么方法

问候

解决方法

目前,您请求的使用 Addins API 添加云附件作为参考的功能不是产品的一部分。我们在 Tech Community Page 上跟踪 Outlook 加载项功能请求。请在那里提交您的请求并选择适当的标签。在我们进行规划过程时,会考虑技术社区的功能请求。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...