Google Apps Script中如何绕过Gmail单封邮件50个收件人限制?
问题根因
触发Exception: Limit Exceeded: Email Recipients Per Message报错,是GmailApp封装服务的上层限制:createDraft、sendEmail这类简易方法,单封邮件传入的所有收件人(包含To、Cc、Bcc字段)合计不能超过50个。这个限制是Apps Script对Gmail服务做封装时加的参数校验,不是Gmail产品本身的收件人上限。
可行解决方案
方案1:调用高级Gmail服务创建草稿(推荐,完全匹配单封草稿需求)
普通Gmail账号单封邮件实际支持最多500个收件人,Workspace账号上限更高。通过Apps Script的高级Gmail服务直接构造标准RFC 2822格式的原始邮件、调用API创建草稿,可以直接绕过GmailApp的50人校验,创建出来的草稿和手动在Gmail网页端创建的没有区别,所有收件人都可以放在To字段。
操作步骤:
- 打开Apps Script编辑器,在左侧「服务」栏点击旁边的
+按钮 - 在弹出的服务列表中选中「Gmail API」,使用默认v1版本点击添加即可
- 替换原有代码为以下实现(新增了空行过滤逻辑,避免文档空行导致无效收件人报错):
function doGet() { createDraft(); return; } // 从文档读取收件人列表,返回去空、去重后的邮箱数组 function getEmails() { const documentID = 'MY_DOCUMENT_ID'; const recipients = DocumentApp.openById(documentID) .getBody() .getText() .split(/\n/) .map(email => email.trim()) .filter(email => email.length > 0); Logger.log(recipients); return recipients; } // 通过Gmail API创建草稿 function createDraft() { const recipientList = getEmails(); const subject = 'SUBJECT'; const body = 'BODY TEXT'; // 构造符合RFC 2822规范的原始邮件,中文主题做base64编码避免乱码 const rawEmail = [ `To: ${recipientList.join(', ')}`, 'MIME-Version: 1.0', 'Content-Type: text/plain; charset=UTF-8', `Subject: =?UTF-8?B?${Utilities.base64Encode(subject, Utilities.Charset.UTF_8)}?=`, '', body ].join('\r\n'); // 转换为Gmail API要求的base64url编码格式 const encodedRaw = Utilities.base64EncodeWebSafe(rawEmail, Utilities.Charset.UTF_8); // 调用接口创建草稿 Gmail.Users.Drafts.create( { message: { raw: encodedRaw } }, 'me' ); }
方案2:拆分收件人到多收件头字段(无需开启高级服务)
如果不想额外开启高级服务,可以把60个收件人拆分到To、Cc、Bcc三个字段,每个字段传入的收件人数不超过50即可,三个字段合计最多支持150个收件人,足够覆盖当前需求。不需要修改原有getEmails方法,只需要替换createDraft方法即可:
function createDraft() { const allRecipients = getEmails().split(',').map(e => e.trim()).filter(e => e.length>0); // 可根据自己的需求调整各字段的收件人分配数量,单字段不超过50即可 const to = allRecipients.slice(0,25).join(','); const cc = allRecipients.slice(25,50).join(','); const bcc = allRecipients.slice(50).join(','); GmailApp.createDraft(to, 'SUBJECT', 'BODY TEXT', { cc: cc, bcc: bcc }); }
注意:这个方法的缺点是Cc、Bcc字段的收件人会分别显示在草稿的抄送、密送栏,不会全部出现在主收件人栏,适合对收件人字段位置没有强制要求的场景。
避坑说明
不要采用拆分多封邮件的方案:这种方式会生成多封独立草稿,发送后收件人收到的是分散的独立邮件,完全不符合单封邮件的需求。
内容的提问来源于stack exchange,提问作者Ch1orina7ed
相关产品推荐
相关产品推荐

