Outlook Add-in开发:回复/全部回复时邮件信息丢失问题
解决方案
核心思路
不要直接覆盖回复邮件的全部正文,而是保留Outlook自动生成的引用块(包含发件人、收件人、发送时间、主题、水平线及原邮件内容结构),仅修改原邮件正文部分的内容。
具体实现(以Office JavaScript API为例)
- 获取回复邮件的完整HTML正文:通过
body.getAsync获取包含引用块的全部内容,确保不丢失元数据部分。 - 定位并修改原内容:在获取到的HTML中找到原邮件正文的目标文本(比如
abc),替换为修改后的内容(abcd)。 - 将修改后的HTML写回邮件:用
body.setAsync把处理后的HTML重新设置为邮件正文。
示例代码:
// 获取当前回复邮件的HTML正文 Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (result) => { if (result.status === Office.AsyncResultStatus.Succeeded) { const originalHtml = result.value; // 替换原内容(根据实际HTML结构调整匹配规则,避免误替换引用块的其他内容) const modifiedHtml = originalHtml.replace(/abc/g, 'abcd'); // 写回修改后的正文 Office.context.mailbox.item.body.setAsync(modifiedHtml, { coercionType: Office.CoercionType.Html }, (setResult) => { if (setResult.status !== Office.AsyncResultStatus.Succeeded) { console.error('修改正文失败:', setResult.error.message); } }); } else { console.error('获取正文失败:', result.error.message); } });
注意事项
- 不同版本的Outlook回复引用块的HTML结构可能有差异,建议测试时查看实际的HTML内容,调整替换规则(比如使用更精准的正则,或通过class/id定位原内容容器)。
- 如果是手动构建回复内容,需自行拼接引用元数据:通过
Office.context.mailbox.item.originalItem获取原邮件的from、to、sentDate、subject等属性,然后按照Outlook的格式构建引用块HTML,再拼接修改后的内容。
内容的提问来源于stack exchange,提问作者Smit Rathod
相关产品推荐
相关产品推荐

