SendGrid入站邮件回复后创建新邮件线程问题咨询
SendGrid邮件无法合并到同一线程问题解决方法
问题根因
主流邮件客户端判断多封邮件是否属于同一个线程,核心依赖In-Reply-To、References两个标准邮件头字段,你当前的代码未配置这两个字段,所以每次新发送的邮件都会被识别为独立线程。
解决步骤
- 存储首次发信的Message-ID
SendGrid发信成功后会返回对应邮件的唯一x-message-id,你需要将该ID和对应业务场景(比如当前lead的ID)绑定存储到你的数据库中。 - 回复同线程邮件时补充指定邮件头
后续给同一个线程发信时,在msg配置中新增headers字段,将In-Reply-To和References都设置为该线程首次发信的Message-ID即可。
修改后的代码示例
sgMail.setApiKey(apiKey); const msg = { to: lead.email, from: config.email, subject: subject, // 同线程邮件建议主题保持一致,可添加Re:前缀提升兼容性 html: body, attachments: attachments, // 新增headers配置,storedMessageId为你存储的当前线程对应原始Message-ID headers: { 'In-Reply-To': storedMessageId, 'References': storedMessageId } }; console.log('sendGrid', msg); return new Promise((resolve, reject) => { sgMail .send(msg) .then((response) => { // 首次发信时,保存返回的Message-ID关联到当前lead const messageId = response[0].headers['x-message-id']; // 此处补充你自己的存储逻辑 console.log('Email sent, Message-ID:', messageId); resolve('Email sent'); }).catch((error) => { console.log('error sendGrid', error.response.body); reject(error); }); });
补充说明
- 入站回复触发SendGrid webhook时,返回的内容里会携带
In-Reply-To字段,你可以通过该字段匹配到对应的原始线程,回复时复用对应ID即可。 - 部分老旧邮件客户端会优先通过主题匹配线程,同线程邮件尽量保持主题前缀一致。
- SendGrid开发者中心的官方文档内,邮件头配置、入站webhook相关章节有对应参数的详细说明。
内容的提问来源于stack exchange,提问作者Jayanth
相关产品推荐
相关产品推荐

