使用SMTP Relay结合Google Apps Script发邮件及配额问题咨询
使用Google Apps Script通过SMTP Relay绕过MailApp配额限制
你的问题核心在于:当前使用的MailApp.sendEmail()方法,即使配置了SMTP参数,依然受限于MailApp的每日配额——因为这个方法本质还是调用Google的内置邮件服务,并没有真正通过SMTP Relay协议直接发送邮件。要避开配额限制,需要直接通过SMTP协议连接Google Workspace的SMTP Relay服务,而非依赖MailApp。
解决步骤
1. 先在Google Workspace后台配置SMTP Relay
作为Workspace管理员,需要先在Admin Console中开启并配置SMTP Relay:
- 进入「应用 → Google Workspace → Gmail → 高级设置」
- 找到「SMTP Relay服务」,添加允许的发送规则:
- 可以选择允许特定用户、整个域名,或者脚本的执行IP(注意:Apps Script的IP是动态的,更推荐用户/域名认证)
- 根据需求勾选「需要TLS加密」「需要SMTP认证」等选项
2. 在Apps Script中实现SMTP Relay发送
我们可以使用社区维护的SMTPApp库来简化SMTP协议的实现:
第一步:添加SMTPApp库
在Apps Script编辑器中:
- 点击「扩展 → 库」
- 输入库ID:
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF - 选择最新版本,保存
第二步:编写发送代码
function sendEmailViaSMTPRelay() { // SMTP Relay配置(适配Google Workspace) const smtpConfig = { host: "smtp-relay.gmail.com", port: 587, // 推荐用587(TLS加密),也可选择25或465 useSSL: false, // 587端口用TLS,此处设为false会自动触发TLS升级 username: "your-workspace-account@your-domain.com", // 你的Workspace邮箱 password: "your-app-password", // 开启2FA的话需用应用密码,否则用账号密码;IP认证可留空 }; // 邮件内容 const emailDetails = { to: "recipient@example.com", subject: "SMTP Relay测试邮件", body: "这是通过SMTP Relay发送的邮件,不受MailApp的2000封每日配额限制", from: "your-workspace-account@your-domain.com", replyTo: "reply@your-domain.com" }; // 执行发送 SMTPApp.sendMail(smtpConfig, emailDetails); }
关键注意事项
- 配额说明:SMTP Relay的发送配额由你的Google Workspace套餐决定,通常远高于MailApp的2000封/日限制,具体可查看Workspace套餐详情
- 应用密码:如果你的账号开启了两步验证,必须生成「应用密码」用于SMTP认证,不能用普通账号密码
- 邮件投递性:确保你的域名已配置正确的SPF、DKIM记录,避免邮件被标记为垃圾邮件
为什么原代码无效?
MailApp.sendEmail()方法中的smtpServer等参数是Google内部用于适配特定场景的,并没有让脚本直接连接外部SMTP服务器。该方法的调用依然会走Google的MailApp服务,所以配额限制依然生效。只有直接通过SMTP协议发送,才能绕过这个限制。
内容的提问来源于stack exchange,提问作者Asking Bob
相关产品推荐
相关产品推荐

