You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Graph Client发送邮件自定义Header,回复未携带的解决方案咨询

问题描述

使用Graph Client发送带有自定义Header的邮件,期望回复邮件中也包含相同的Header以实现对话追踪,但回复邮件中并未携带这些Header。请问是否有办法让所有回复邮件都携带这些自定义Header?

发送邮件的代码示例

Message message = new Message();
message.subject = "9/9/2018: DRaft _ testing";
ItemBody body = new ItemBody();
body.content = "The group represents Nevada.";
message.body = body;
LinkedList<Recipient> toRecipientsList = new LinkedList<Recipient>();
Recipient toRecipients = new Recipient();
EmailAddress emailAddress = new EmailAddress();
emailAddress.address = "dummy@ggg.net";
toRecipients.emailAddress = emailAddress;
toRecipientsList.add(toRecipients);
message.toRecipients = toRecipientsList;

SingleValueLegacyExtendedProperty singleValueLegacyExtendedProperty = new SingleValueLegacyExtendedProperty();
singleValueLegacyExtendedProperty.id="propery-id_graph";
singleValueLegacyExtendedProperty.value ="propery-id_graph/Aamir";
List<SingleValueLegacyExtendedProperty> singleValueLegacyExtendedProperties = new LinkedList<>();
singleValueLegacyExtendedProperties.add(singleValueLegacyExtendedProperty);
SingleValueLegacyExtendedPropertyCollectionRequestBuilder builder=new SingleValueLegacyExtendedPropertyCollectionRequestBuilder();
message.singleValueExtendedProperties = new SingleValueLegacyExtendedPropertyCollectionPage(singleValueLegacyExtendedProperties);
LinkedList<InternetMessageHeader> internetMessageHeadersList = new LinkedList<InternetMessageHeader>();
InternetMessageHeader internetMessageHeaders = new InternetMessageHeader();
internetMessageHeaders.name = "x-Header-1";
internetMessageHeaders.value = "aaa";
internetMessageHeadersList.add(internetMessageHeaders);
InternetMessageHeader internetMessageHeaders1 = new InternetMessageHeader();
internetMessageHeaders1.name = "x-Header-2";
internetMessageHeaders1.value = "bbb";
internetMessageHeadersList.add(internetMessageHeaders1);
message.internetMessageHeaders = internetMessageHeadersList;
解决方案

自定义SMTP头(比如你代码里的x-Header-1、x-Header-2)默认不会被邮件客户端在回复时自动继承,因为大多数客户端仅保留标准的邮件追踪头(如Message-ID、In-Reply-To)。要实现对话追踪,推荐以下几种可靠方式:

1. 将追踪信息嵌入邮件主题

在邮件主题前添加唯一追踪标识,比如:

[TRK-12345] 9/9/2018: DRaft _ testing

邮件客户端回复时通常会自动添加Re:前缀,追踪标识会被保留,你可以通过解析回复邮件的主题提取追踪ID,实现对话关联。这种方式兼容性最好,不受邮件系统或客户端限制。

2. 正确使用Exchange扩展属性(内部环境适用)

你代码里尝试使用了SingleValueLegacyExtendedProperty,但当前的属性ID格式不正确,导致属性无法被正确存储和继承。正确的扩展属性ID需要指定属性集、数据类型和名称,示例格式如下:

SingleValueLegacyExtendedProperty trackingProperty = new SingleValueLegacyExtendedProperty();
// 格式:[数据类型] {属性集GUID} Name [属性名称]
trackingProperty.id = "String {00020329-0000-0000-C000-000000000046} Name tracking-id";
trackingProperty.value = "propery-id_graph/Aamir";

这种属性存储在Exchange服务器端,当Exchange内部用户回复邮件时,该属性会被自动保留。你可以通过Graph API查询回复邮件的singleValueExtendedProperties来获取追踪信息。但注意:如果邮件被转发到非Exchange邮箱(如Gmail),这类扩展属性会丢失,仅适用于Exchange内部环境。

3. 自定义SMTP头继承(局限性大)

如果必须使用SMTP头,需要接收方的邮件客户端支持自定义头继承,但不同客户端(Outlook、Gmail、Thunderbird)的行为不一致,无法保证所有回复都携带自定义头,因此不推荐这种方式。

内容的提问来源于stack exchange,提问作者Nishant Kumar Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:15:31