如何通过Microsoft Graph API排除特定Outlook邮件追踪且不破坏会话线程
问题背景
我正在构建一款多提供商邮件客户端,用于追踪发送、回复及转发的邮件。在Gmail中,可通过Gmail API在发送、回复或转发时添加自定义头(如X-CRM-IGNORE: true),轻松将特定邮件排除追踪机制且不破坏会话线程。但在Outlook/Microsoft Graph API中,尝试添加自定义Internet头时遇到限制,Graph仅支持指定收件人、正文、附件等内容。需要找到一种方式标记通过Graph API发送、回复或转发的邮件以排除追踪,且不能破坏Outlook或Graph中的会话/线程,效果需类似Gmail的X-CRM-IGNORE。
问题解答
1. 通过Microsoft Graph发送、回复或转发邮件时,是否可添加类似X-CRM-IGNORE的自定义Internet头?
不行。目前Microsoft Graph API在发送、回复或转发邮件的接口中,不支持直接添加自定义Internet头。无论是使用sendMail、reply还是forward端点,请求体里都没有允许设置自定义SMTP头的字段,这类操作会被API拒绝。
2. 若不可行,推荐哪些替代标记方式?
以下几种方案可实现类似的标记效果,且不会破坏邮件会话:
使用邮件自定义扩展属性(Extended Properties)
这是最推荐的方案,属于Graph API原生支持的自定义标记方式,完全不会影响邮件的会话线程。你可以创建一个字符串类型的扩展属性,比如X-CRM-IGNORE,值设为true。发送/回复/转发邮件时,在请求体中加入该扩展属性,后续追踪系统通过Graph API查询邮件时,读取这个属性即可判断是否跳过追踪。
示例请求片段:{ "message": { "subject": "回复:测试邮件", "body": { ... }, "singleValueExtendedProperties": [ { "id": "String {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} Name X-CRM-IGNORE", "value": "true" } ] } }注:需要先注册这个自定义属性,或者使用命名属性的方式直接定义。
使用邮件分类(Categories)
可以创建一个专属的分类,比如CRM-IGNORE,发送邮件时将该分类添加到邮件的categories字段中。这种方式在Outlook客户端中会显示分类标签,但不会破坏会话线程。后续追踪系统通过检查邮件的categories是否包含该值,来决定是否跳过追踪。
示例请求片段:{ "message": { "subject": "转发:测试邮件", "body": { ... }, "categories": ["CRM-IGNORE"] } }隐藏标记在邮件正文的元数据中
如果上述方案都不适用,可以在邮件正文的开头或末尾添加一段隐藏的HTML注释,比如<!-- X-CRM-IGNORE: true -->。这种方式不会影响用户阅读体验,后续追踪系统解析邮件正文时提取该注释即可。但需要注意,若邮件被转为纯文本格式,注释可能会丢失,可靠性不如前两种方案。
内容的提问来源于stack exchange,提问作者ALOK PATEL

