使用查询字符串而不是公共URL(Office365)添加内嵌图像

时间:2018-06-12 16:07:10

标签: javascript office-js outlook-web-addins

我通过撰写邮件将内嵌图像添加到Outlook正文并提出了这个问题。以下是addFileAttachmentAysnc的文档:

 Office.context.mailbox.item.addFileAttachmentAsync(attachmentURL, attachmentURL, options, callback);

我的attachmentURL是一个查询字符串,包含图像ID,用户标记,smtp:

 http://namiq-pc/MailForms/api/GetAttachment?AttId=logo.png&MwToken=eteFIPebdPIKTLhfWKXDirp/rhdEVLmBxnKVU69mM36HgJCiINang8QDnB9w4ibKX6YG58esb1Kxa4oPw6s+QenADodv21An6/rjOkBIY1u5KObhrGhZFfOFRRD0+K7Q69J0VmL+6GY=&ReqId=HCYJ+G/WakTy/s1Hz5kURnU4cuANAb83lQ==&userSmtp=tw1621@mdev.org

完成我的撰写表单(弹出窗口)后,单击“完成”,将图像添加到正文中。我还要提一下,在我的控制器上,我正在检查用户的IP,以确保允许他们发出请求。当addFileAttachmentAsync完成时,它将img src设置为" cid:xxxx"并致电

Office.cast.item.toItemCompose(Office.context.mailbox.item).body.setSelectedDataAsync(body,{coercionType: "html", asyncContext: "set message body" }    

当我点击完成时,文本内容正在被添加好,我瘦的渲染图像源强制它再次转到我的控制器并且无法通过IP检查,因为现在它是Outlook使请求不是用户(IP地址的请求是IPv6格式)。 (IP检查有一个潜在用户列表和10.10.xx.xx格式的IP地址。)

现在在我的电子邮件正文中,我的attachmentURL作为源代码而得到了一个破碎的图像,而originalsrc就是我设置的

<div class="x_mw-images"><img src="http://namiq-pc/MailForms/api/GetAttachment?AttId=logo.png&amp;MwToken=eteFIPebdPIKTLhfWKXDirp/rhdEVLmBxnKVU69mM36HgJCiINang8QDnB9w4ibKOnFdBCeOpo1Nr8bCtXa4vyQ5PI/bOg8yTI/qpY5HVNpPVBQJghdmnAfgR/WTaGk0hAiQn3237yU=&amp;ReqId=IOyOCna5kLpAKN6EjFKuNExpYNANAb83lQ==&amp;userSmtp=tw1621@mdev.org" alt="logo.png" height="100" originalsrc="cid:1528819032946.png" size="90196" style="user-select: none;"></div>

我理解的是你放置的任何东西Outlook使用attachmentURL覆盖它并设置你的&#34; src&#34;价值作为原始来源。检查IP地址对我的情况来说是至关重要的一步,任何想法如何解决这个问题或者可能解释我做错了会有所帮助。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。我的代码工作方式是,它首先发送带有用户令牌和路径的POST请求。此POST请求返回需要从sevrer抓取的文件名。然后我用这些文件名和其他一些细节调用addFileAttachmentAsync以帮助进行身份验证。

<script src="https://cdnjs.cloudflare.com/ajax/libs/color-thief/2.0.1/color-thief.min.js"></script>

当addFileAttachmentAsync向服务器发出GET请求时,我会进行IP检查。由于IP安全列表,此步骤成功。在IP检查失败的情况下(当撰写表单体转换为邮件正文时会发生这种情况),我只是通过比较IP的哈希来确保POST和GET请求都由同一地址发送。

因为服务器在最后一步中发出了两个请求,当一切正常时,它们确实匹配。您只需要在这些步骤中携带POST请求IP地址(从POST返回散列IP作为JSON),这样您就可以比较它在GET期间。