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

Javascript 使用查询字符串而不是公共URL添加内联图像,Office365,javascript,office-js,outlook-web-addins,Javascript,Office Js,Outlook Web Addins,我通过撰写邮件将内联图像添加到Outlook正文中,并提出了此问题。以下是AddFileAttachmentAsnc的文档: Office.context.mailbox.item.addFileAttachmentAsync(attachmentURL, attachmentURL, options, callback); My attachmentURL是一个查询字符串,具有图像ID、用户令牌、smtp: http://namiq-pc/MailForms/api/GetAttachm

我通过撰写邮件将内联图像添加到Outlook正文中,并提出了此问题。以下是AddFileAttachmentAsnc的文档:

 Office.context.mailbox.item.addFileAttachmentAsync(attachmentURL, attachmentURL, options, callback);
My 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
一旦我完成了我的撰写表单(一个弹出窗口),我点击finish,它会将图像添加到正文中。我还应该提到,在我的控制器上,我正在检查一个用户的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都会用attachmentURL覆盖它,并将你的“src”值设置为原始源文件。检查IP地址对于我来说是至关重要的一步,任何关于如何解决这个问题或解释我做错了什么的想法都会有所帮助。

我找到了解决这个问题的方法。我的代码的工作方式是,它首先发送一个带有用户令牌和路径的POST请求。此POST请求返回需要从sevrer获取的文件名。然后我调用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检查失败的情况下(当compose form body转换为mail body时会发生这种情况),我只是通过比较IP的散列来确保POST和GET请求都是通过相同的地址发送的


因为服务器在最后一步中发出两个请求,当一切正常时,它们确实匹配。您只需在整个步骤中携带POST请求IP地址(将POST中的哈希IP作为JSON返回),以便在GET期间进行比较。

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