使用Apps Script自动转发邮件,能否使其显示在收件箱?
解决Gmail自动转发无标识及未转发邮件区分问题
一、让自动转发邮件显示Gmail原生转发标识
直接调用forward方法不会生成Gmail识别的转发格式和邮件头,需要手动构造转发邮件并关联原邮件线程:
- 构造符合Gmail转发格式的邮件
给主题加上Fwd:前缀,正文按Gmail手动转发的引用格式(带>的原邮件内容)包裹,同时插入自定义封面消息。 - 设置关联邮件头
通过inReplyTo和References参数绑定原邮件的Message-ID,让Gmail将转发邮件归入原线程并显示转发标识。 - 标记原邮件为已转发
调用markForwarded()方法,让原邮件也显示已转发状态。
示例代码(Google Apps Script):
function autoForwardWithMarking() { // 替换为你的过滤条件,比如"from:example@domain.com label:inbox" var targetThreads = GmailApp.search("your_filter_query"); var forwardTarget = "your_target_address@example.com"; var customCoverMsg = "这里是你的特定封面消息"; targetThreads.forEach(thread => { var originalMsg = thread.getMessages()[thread.getMessageCount() - 1]; var originalMsgId = originalMsg.getMessageId(); // 构造转发主题和正文 var forwardedSubject = `Fwd: ${originalMsg.getSubject()}`; var forwardedBody = `${customCoverMsg}\n\n> ---------- Forwarded message ----------\n` + `> From: ${originalMsg.getFrom()}\n` + `> Date: ${originalMsg.getDate()}\n` + `> Subject: ${originalMsg.getSubject()}\n` + `> To: ${originalMsg.getTo()}\n\n` + originalMsg.getBody(); // 创建并发送转发邮件,绑定原邮件线程 GmailApp.createDraft(forwardTarget, forwardedSubject, "", { htmlBody: forwardedBody, inReplyTo: originalMsgId, references: originalMsgId }).send(); // 标记原邮件为已转发 originalMsg.markForwarded(); }); }
二、区分未被转发的邮件
放弃仅标记已读的方式,改用自定义标签实现可视化区分:
- 创建专属标签
先创建一个如“未自动转发”的标签,方便快速识别未处理邮件:function createUnforwardedLabel() { var label = GmailApp.getUserLabelByName("未自动转发"); if (!label) { GmailApp.createLabel("未自动转发"); } } - 给未转发邮件添加标签
搜索符合过滤条件但未被转发的邮件,批量添加标签:function tagUnforwardedEmails() { // 替换为你的过滤条件,加上-is:forwarded筛选未转发邮件 var unforwardedThreads = GmailApp.search("your_filter_query AND -is:forwarded"); var label = GmailApp.getUserLabelByName("未自动转发"); unforwardedThreads.forEach(thread => thread.addLabel(label)); } - 可选:给已转发邮件添加标签
同样可以创建“已自动转发”标签,处理完成后给原邮件添加,进一步区分状态。
内容的提问来源于stack exchange,提问作者J_Harmon
相关产品推荐
相关产品推荐

