【问题标题】:Send new mail with another mail as attachment using EWS使用 EWS 发送带有另一封邮件作为附件的新邮件
【发布时间】:2019-12-05 19:35:10
【问题描述】:

我正在开发“outlook-web-addon”,它获取当前打开的消息并将其附加到新消息并将其发送到特定地址..所有这些都不允许用户交互(无撰写屏幕)

下面的代码一直传递到“创建附件”,这会产生错误: "此调用者或应用程序无法使用请求的 Web 方法"

function sendMessage() {
    //$("#y").load("x.html");
    //var mailBody = document.load("MailBody");
    //<object type="text/html" data="mailBody.html"></object>

    if (Office.context.mailbox.item.itemType !== Office.MailboxEnums.ItemType.Message) {
        return;
    }

    var parentId='';
    var mimeContent='';

    //Get current selected mail message Id
    var mailbox = Office.context.mailbox;
    var item = mailbox.item;
    var itemId = item.itemId;


    //1- Create Mime content from the current selected mail message
    var request_MimeContent =
        '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
            '    <soap:Body>' +
            '       <m:GetItem>' +
            '           <m:ItemShape>' +
            '               <t:BaseShape>IdOnly</t:BaseShape>' +
            '               <t:AdditionalProperties>' +
            '                   <t:FieldURI FieldURI="item:MimeContent" />' +
            '                   <t:FieldURI FieldURI="item:Subject" />' +
            '               </t:AdditionalProperties>' +
            '           </m:ItemShape>' +
            '           <m:ItemIds>' +
            '               <t:ItemId Id="' +itemId +'" />' +
            '           </m:ItemIds>' +
            '       </m:GetItem>' +
            '    </soap:Body>' +
            '</soap:Envelope>';
    Office.context.mailbox.makeEwsRequestAsync(request_MimeContent, createMail);
}

function createMail(asyncResult) {
    if (asyncResult.status == "failed") {
        return;
    } else {
        //2- Get MimeContent
        var response = $.parseXML(asyncResult.value);
        window.mimeContent = response.getElementsByTagName("MimeContent");

        //3- Create mail request
        var request_CreateMail =
            '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
                '  <soap:Header><t:RequestServerVersion Version="Exchange2010" /></soap:Header>' +
                '  <soap:Body>' +
                '    <m:CreateItem MessageDisposition="SaveOnly">' +
                '      <m:SavedItemFolderId><t:DistinguishedFolderId Id="sentitems" /></m:SavedItemFolderId>' +
                '      <m:Items>' +
                '        <t:Message>' +
                '          <t:Subject>Phishing Mail Report!</t:Subject>' +
                '          <t:Body BodyType="HTML">This is a Test !!</t:Body>' +
                '          <t:ToRecipients>' +
                '            <t:Mailbox><t:EmailAddress>M.Ziada@Zinad.net</t:EmailAddress></t:Mailbox>' +
                '          </t:ToRecipients>' +
                '        </t:Message>' +
                '      </m:Items>' +
                '    </m:CreateItem>' +
                '  </soap:Body>' +
                '</soap:Envelope>';
        Office.context.mailbox.makeEwsRequestAsync(request_CreateMail, createAttachment);
    }
}

function createAttachment(asyncResult) {
    if (asyncResult.status == "failed") {
        return;
    } else {
        //4- Get new message Id
        var response = $.parseXML(asyncResult.value);
        window.parentId = response.getElementsByTagName("ItemId");

        //5- Create attachment from the mime content and belongs to the new message
        var request_CreateAttachment =
            '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
                '    <soap:Header><t:RequestServerVersion Version="Exchange2010" /></soap:Header>' +
                '    <soap:Body>' +
                '       <m:CreateAttachment>' +
                '           <m:ParentItemId Id="' +window.parentId +'" />' +
                '           <m:Attachments>' +
                '               <t:ItemAttachment>' +
                '                   <t:Name>Play tennis?</t:Name>' +
                '                   <t:IsInline>false</t:IsInline>' +
                '                   <t:Message>' +
                '                       <t:MimeContent CharacterSet="UTF-8">' +window.mimeContent +'</t:MimeContent>' +
                '                   </t:Message>' +
                '               </t:ItemAttachment>' +
                '           </m:Attachments>' +
                '       </m:CreateAttachment>' +
                '    </soap:Body>' +
                '</soap:Envelope>';
        Office.context.mailbox.makeEwsRequestAsync(request_CreateAttachment, sendItem);
    }
}

function sendItem(asyncResult) {
    if (asyncResult.status == "failed") {
        return;
    } else {
        //6- Get attachment Id
        var response = $.parseXML(asyncResult.value);
        var attachmentId = response.getElementsByTagName("AttachmentId");

        //7- Send newly created message
        var request_SendItem =
            '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
                '    <soap:Header><t: RequestServerVersion Version="Exchange2010" /></soap:Header>' +
                '    <soap:Body>' +
                '       <m:SendItem SaveItemToFolder="true">' +
                '           <m:ItemIds>' +
                '               <t:ItemId Id="' +window.parentId +'"/>' +
                '           </m:ItemIds>' +
                '           <m:SavedItemFolderId>' +
                '               <t:DistinguishedFolderId Id="sentitems" />' +
                '           </m:SavedItemFolderId>' +
                '       </m:SendItem>' +
                '    </soap:Body>' +
                '</soap:Envelope>';
        Office.context.mailbox.makeEwsRequestAsync(request_SendItem,
            function(asyncResult2) {
                if (asyncResult2.status == "failed") {
                    return;
                } else {
                }
            });
    }
}

我在 Chrome 上尝试,它给了我这个错误: "此调用者或应用程序无法使用请求的 Web 方法"

另外,我想知道这是否适用于桌面 Outlook 应用程序?

【问题讨论】:

    标签: soap office365 exchangewebservices office-js outlook-web-addins


    【解决方案1】:

    根据https://docs.microsoft.com/en-us/outlook/add-ins/understanding-outlook-add-in-permissions#readwritemailbox-permission,MakeEWSRequestAsync 不允许附件操作。有一种 ReadOnly 方法可用于访问附件 https://docs.microsoft.com/en-us/outlook/add-ins/get-attachments-of-an-outlook-item(但我不相信这将允许您创建一个)。

    我知道的唯一解决方法是,因为 CreateItem 是允许的,如果您要发送的消息首先在 Mime 中构建(附件 mime 编码),然后您可以从 MIMEContent 创建消息该内容应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多