含内嵌图片的邮件发送时无法设置Internet Headers(Outlook Web加载项&Office JS)
Outlook Web加载项内嵌图片加密及Internet Headers设置问题解决方案
一、内嵌图片加密问题处理
当邮件包含内嵌图片时,Outlook通过cid(Content-ID)关联HTML正文与邮件内嵌附件,而非依赖src中的临时链接(该链接仅在发件人端有效,收件人无法访问)。要解决解密后加载项面板图片破损的问题,需遵循以下要点:
- 加密HTML正文时,保留img标签的
originalsrc(cid值)、contenttype等核心属性,仅加密正文的文本内容和非关联属性。这些cid属性是Outlook识别内嵌附件的关键,一旦被破坏或篡改,收件端无法匹配到对应的图片资源。 - 解密后确保HTML中的img标签cid与邮件内嵌附件的
Content-ID完全一致,Outlook会自动通过cid加载内嵌图片,无需依赖原临时src链接。 - 加密过程中避免修改img标签的结构,不要删除或替换cid相关属性,仅对正文的文字内容进行加密处理。
二、带内嵌图片时设置Internet Headers报错解决
针对Sys.ArgumentTypeException: Object of type 'object' cannot be converted to type 'string'.错误,核心原因是internetHeaders.setAsync参数不符合要求或邮件状态冲突,可按以下步骤修复:
- 校验参数格式:确保传入
setAsync的对象中,所有header的value均为字符串类型,禁止传入数字、布尔值等非字符串数据。示例:// 正确写法 mail_item.internetHeaders.setAsync({"X-Encrypt-Key": "abc123"}, function(res) {}); // 错误写法(value为数字) mail_item.internetHeaders.setAsync({"X-Encrypt-Version": 1}, function(res) {}); - 调整操作顺序:原流程中先设置headers再保存邮件,可能因内嵌图片导致邮件状态不稳定。建议调整为:
- 获取并加密HTML正文
- 设置加密后的正文(
body.setAsync) - 调用
saveAsync保存邮件,确保内容(包括内嵌图片)稳定 - 加载自定义属性并设置
- 设置Internet Headers
- 再次调用
saveAsync保存最终修改
- 排查header合法性:确保header的key符合RFC规范,不能包含空格、特殊字符(如
:、@等),且避免使用Outlook内置的保留header名称。 - 合并现有headers:先通过
internetHeaders.getAsync获取当前邮件的所有headers,将新headers合并到现有对象中,再调用setAsync,避免冲突:mail_item.internetHeaders.getAsync(function(getRes) { if (getRes.status === Office.AsyncResultStatus.Succeeded) { const existingHeaders = getRes.value; // 合并新header existingHeaders["X-Encrypt-Status"] = "encrypted"; mail_item.internetHeaders.setAsync(existingHeaders, function(setRes) { // 处理结果 }); } });
内容的提问来源于stack exchange,提问作者Smit Rathod
相关产品推荐
相关产品推荐

