【问题标题】:adding inline image using Query String instead of public URL, Office365使用查询字符串而不是公共 URL,Office365 添加内联图像
【发布时间】:2018-06-19 04:58:17
【问题描述】:

我正在通过撰写邮件将内联图像添加到 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地址列表)。

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

【问题讨论】:

  • 使用 IP 地址验证用户有其挑战,因为网络配置可能会发生变化。您是否查看过交换身份令牌以确定用户授权?
  • 我想出了解决这个问题的办法。我的代码的工作方式是,它首先发送一个带有用户令牌和路径的 POST 请求。此 POST 请求返回需要从服务器获取的文件名。然后我用这些文件名和其他一些细节调用 addFileAttachmentAsync 来帮助进行身份验证。当 addFileAttachmentAsync 向服务器发出 GET 请求时,我会进行 IP 检查。由于 IP 安全列表,此步骤成功。在 IP 检查失败的情况下,我只是通过比较 IP 的哈希来确保 POST 和 GET 请求都是由同一地址发送的

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


【解决方案1】:

我想出了解决这个问题的办法。我的代码的工作方式是,它首先发送一个带有用户令牌和路径的 POST 请求。此 POST 请求返回需要从服务器获取的文件名。然后我用这些文件名和其他一些细节调用 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请求都是由相同的地址发送的。

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

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 2015-12-03
    • 2015-07-20
    • 2016-02-13
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多