免费AppScript账户用GmailApp抄送超100人触发收件人上限异常
关于Google Apps Script免费版Gmail收件人限制的问题解答
1. 升级账户能否解决该问题?
升级到Google Workspace付费版可以提升单邮件的收件人上限,但并非无限制:
- 免费Google账户:单邮件的收件人总数(To+Cc+Bcc总和)上限是100人,这就是你触发
Limit Exceeded: Email Recipients Per Message错误的原因 - Google Workspace付费版:单邮件收件人总数上限提升至1000人(不同套餐可能略有差异)
如果你的抄送人数在1000以内,升级后就能直接解决问题;要是超过1000人,还是需要通过分批发送的方式处理。
2. 代码优化方案(无论是否升级都适用)
不管有没有升级账户,当收件人数量超过对应上限时,拆分列表分批发送都是更稳妥的方案。以下是优化后的代码:
function sendMail(fullname, mailTo, mailCC, subject, image) { var img = DriveApp.getFileById(image).getAs("image/png"); var logo = {"logo" : img}; // 把CC收件人字符串拆分为数组,清理空值和多余空格 var ccRecipients = mailCC.split(",").map(recipient => recipient.trim()).filter(recipient => recipient); // 每批收件人数量:免费版填100,付费版可填1000 const batchSize = 100; // 循环分批发送邮件 for (let i = 0; i < ccRecipients.length; i += batchSize) { const currentBatch = ccRecipients.slice(i, i + batchSize).join(","); try { GmailApp.sendEmail(mailTo, subject, "", { cc: currentBatch, htmlBody: `<p>Hi ${fullname}</p></br><img src='https://drive.google.com/uc?export=view&id=${image}'>` }); console.log(`第${Math.floor(i/batchSize)+1}批邮件发送成功,抄送人数:${currentBatch.split(",").length}`); } catch (e) { console.error(`第${Math.floor(i/batchSize)+1}批邮件发送失败:${e.message}`); } // 可选:添加1秒延迟避免触发发送频率限制 // Utilities.sleep(1000); } }
额外提醒
- 除了单邮件收件人上限,还要注意每日发送邮件总数限制:免费版每日最多发100封,付费版根据套餐不同(比如基础版每日1500封)
- 若分批发送时遇到频率限制,可适当延长延迟时间
内容的提问来源于stack exchange,提问作者Khởi Tiêu
相关产品推荐
相关产品推荐

