如何在Gmail同线程中回复原始邮件收件人(Apps Script实现)
解决方案:通过Gmail API实现线程内指定收件人回复
GmailApp的内置方法确实无法直接满足“在原线程内回复原始邮件收件人”的需求,需要借助Gmail API来实现,步骤如下:
1. 启用Gmail API
在Apps Script编辑器中:
- 点击左侧菜单栏的「服务」→「添加服务」
- 找到「Gmail API」并添加,版本选择最新稳定版
2. 实现代码示例
替换你原有的代码,使用以下逻辑:
var emailBody = "Hello, This is a reminder to the previous email"; var existingThreadId = "你的线程ID"; // 替换为实际线程ID // 获取原始线程和首条消息 var thread = GmailApp.getThreadById(existingThreadId); var originalMessage = thread.getMessages()[0]; var recipientEmail = originalMessage.getTo(); var originalSubject = originalMessage.getSubject(); var originalMessageId = originalMessage.getId(); // 构造回复的邮件头和内容 var replySubject = originalSubject.startsWith("Re: ") ? originalSubject : `Re: ${originalSubject}`; var rawMessage = [ `To: ${recipientEmail}`, `Subject: ${replySubject}`, `In-Reply-To: ${originalMessageId}`, `References: ${originalMessageId}`, `Content-Type: text/html; charset=utf-8`, ``, emailBody ].join("\r\n"); // 编码为base64url格式 var encodedMessage = Utilities.base64EncodeWebSafe(rawMessage, Utilities.Charset.UTF_8); // 发送回复并关联到原线程 Gmail.Users.Messages.send( {raw: encodedMessage}, "me", {threadId: existingThreadId} );
代码说明
- 邮件头设置:
In-Reply-To和References是关键,这两个头会让Gmail将新邮件识别为原线程的回复,而非独立邮件。 - base64编码:Gmail API要求邮件内容以base64url格式传递,所以需要用
Utilities.base64EncodeWebSafe处理。 - 线程关联:调用
Gmail.Users.Messages.send时传入threadId参数,确保回复直接归入原线程。
注意事项
- 首次运行代码时,需要授权Gmail API的访问权限(授权范围包含发送邮件)。
- 如果原始邮件有多个收件人,
originalMessage.getTo()会返回所有收件人(用逗号分隔),代码会自动全部回复。
内容的提问来源于stack exchange,提问作者Hamed
相关产品推荐
相关产品推荐

