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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:30:50