使用查询字符串而不是 public URL 添加内联图像,Office365

adding inline image using Query String instead of public URL, Office365

我正在通过撰写邮件将内联图像添加到 Outlook 正文中并遇到了这个问题。这是 addFileAttachmentAysnc 的文档:

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

我的附件 URL 是一个包含图像 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

完成撰写表单后(弹出窗口 window),我单击完成,这会将图像添加到正文中。我还应该提到,在我的控制器上,我正在检查用户的 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 检查有一个潜在用户的 IP 地址列表,格式为 10.10.xx.xx)。

现在,在我的电子邮件正文中,我得到了一张损坏的图像,其中附件 URL 作为源,而 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 覆盖它,并将您的 "src" 值设置为原始源。检查 IP 地址对我来说是至关重要的一步,任何关于如何解决这个问题的想法或者对我做错了什么的解释都会有所帮助。

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

 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

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

因为服务器在这最后一步发出了两个请求,当一切正常时,他们 match.You 只需要在这些步骤中携带 POST 请求 IP 地址(从 POST 作为 JSON) 所以你可以在 GET 期间比较它。