使用Gmail API批量发邮件,如何让收件人仅看到自身邮箱?
解决Gmail API批量发件时隐藏其他收件人地址的方案
嘿,这个需求其实挺常见的,我给你两个最靠谱的实现思路,都是Gmail API原生支持的:
方案一:使用密送(BCC)字段
这是最省事的批量处理方式——把所有收件人都放到BCC(密送)字段里,同时在To字段填你自己的邮箱地址(或者一个专门的发件备用邮箱)。这样所有收件人只会在邮件里看到自己的地址(以及你填在To里的地址),完全看不到其他收件人。
用Gmail API实现的话,构建邮件消息时,只需要把收件人列表赋值给bcc参数,示例代码(Python)大概是这样:
from googleapiclient.discovery import build from email.mime.text import MIMEText import base64 def create_message(sender, to, bcc_list, subject, message_text): message = MIMEText(message_text) message['to'] = to message['bcc'] = ','.join(bcc_list) message['subject'] = subject raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode() return {'raw': raw_message} # 调用示例 service = build('gmail', 'v1', credentials=creds) recipient_list = ['user1@example.com', 'user2@example.com', ...] message = create_message('your-email@gmail.com', 'your-email@gmail.com', recipient_list, '批量邮件主题', '邮件内容') service.users().messages().send(userId='me', body=message).execute()
注意:有些邮件系统会对To字段为空的邮件标记为垃圾邮件,所以一定要填一个有效的To地址(比如你自己的邮箱)。
方案二:单独发送每一封邮件
如果你需要让每封邮件的To字段就是收件人自己的地址(完全看不到其他任何无关地址),那最好的方式就是给每个收件人单独发送一封邮件。这种方式更合规,也完全不会有地址泄露的风险,唯一要注意的是Gmail的发送配额限制:
- 普通Gmail账号:每天最多发送500封
- Google Workspace账号:每天最多发送2000封
实现起来就是循环遍历收件人列表,每次创建只包含单个收件人的邮件,示例代码:
def send_individual_emails(service, sender, recipient_list, subject, message_text): for recipient in recipient_list: message = MIMEText(message_text) message['to'] = recipient message['subject'] = subject raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode() service.users().messages().send(userId='me', body={'raw': raw_message}).execute() # 调用示例 send_individual_emails(service, 'your-email@gmail.com', recipient_list, '专属邮件主题', '邮件内容')
额外注意事项
- 不管用哪种方案,都要控制发送频率,避免短时间内发送大量邮件触发Gmail的反垃圾机制
- 如果发送内容完全一致,建议给每封邮件加一点个性化内容(比如开头加上收件人姓名),降低被判定为垃圾邮件的概率
- 确保你的API凭据有足够的权限(需要启用Gmail API,并且申请
https://www.googleapis.com/auth/gmail.send权限)
内容的提问来源于stack exchange,提问作者Paul Tal
相关产品推荐
相关产品推荐

