getAllInternetHeadersAsync获取已发送邮件时返回空字符串问题求助
问题:getAllInternetHeadersAsync 获取已发送邮件时返回空字符串
- 调用
Office.MessageRead.getAllInternetHeadersAsync()获取已发送邮件的Internet Headers时,返回值asyncResult.value为空字符串 - 获取已接收邮件时功能完全正常
- 依赖的
emailjs-mime-parser本身工作正常,问题出在API返回的原始内容为空
相关代码:
import parser from 'emailjs-mime-parser'; export const getHeaders = async (mail: Office.MessageRead) => { return await new Promise((resolve, reject) => { mail.getAllInternetHeadersAsync((asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const response = parser(asyncResult.value); resolve(response); } else { reject(new Error(asyncResult.error.message)); } }); }); };
解决方案
1. 检查外接程序权限配置
确认外接程序的manifest.xml中是否包含ReadWriteMailbox或至少ReadMailbox权限。已发送邮件的完整Headers读取可能需要更高权限,仅ItemRead权限可能不足以获取对应内容。
权限配置示例:
<Permissions>ReadWriteMailbox</Permissions>
2. 切换为同步API调用
如果外接程序运行在支持同步API的环境(如Outlook桌面客户端、新版Web客户端),可尝试使用同步版本的getAllInternetHeaders(),规避异步回调的潜在问题:
export const getHeaders = (mail: Office.MessageRead) => { try { const headers = mail.getAllInternetHeaders(); const response = parser(headers); return response; } catch (error) { throw new Error((error as Error).message); } };
3. 直接读取InternetHeaders属性
部分Exchange/Outlook环境中,已发送邮件的Headers可能存储在独立属性中,可尝试通过getItemPropertyAsync直接读取:
export const getHeaders = async (mail: Office.MessageRead) => { return await new Promise((resolve, reject) => { mail.getItemPropertyAsync("InternetHeaders", (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const response = parser(asyncResult.value as string); resolve(response); } else { reject(new Error(asyncResult.error.message)); } }); }); };
4. 升级Outlook客户端版本
部分旧版Outlook客户端(尤其是Web版)存在已发送邮件Headers获取的bug,升级到最新版本后重试。
内容的提问来源于stack exchange,提问作者Alex Nietsvietov
相关产品推荐
相关产品推荐

