SparkPost如何编辑邮件To/CC头?需在Amazon SES Raw邮件中复现
在Amazon SES Raw邮件中实现SparkPost式的To/CC收件人显示逻辑
要复现你提到的SparkPost效果——让CC收件人仅收到1封包含所有To地址的邮件,同时每个To收件人收到的邮件仅显示自身地址与CC地址,核心是拆分两组发送逻辑,避免将CC地址重复加入每次发送的收件人列表:
具体实现步骤
1. 单独发送给每个To收件人
对每个To地址(如person.1@email.com),构造Raw邮件时:
- 邮件头
To设为当前收件人的地址 - 邮件头
CC设为目标CC地址(仅用于显示,不加入实际投递列表) - 调用SES的
SendRawEmail接口时,Destinations参数仅填入当前To地址
这样每个To收件人收到的邮件里只会看到自己和CC地址,且不会触发CC地址的额外投递。
2. 单次发送给CC收件人
单独构造一封Raw邮件:
- 邮件头
To设为所有To地址的拼接字符串(如person.1@email.com;person.2@email.com;person.3@email.com) - 邮件头
CC设为目标CC地址 - 调用
SendRawEmail时,Destinations参数仅填入CC地址
这一步确保CC收件人只收到1封包含完整To列表的邮件。
代码示例(Python + Boto3)
import boto3 from email.mime.text import MIMEText from email.utils import formataddr # 初始化SES客户端 ses_client = boto3.client('ses', region_name='us-east-1') # 配置邮件基础信息 from_addr = formataddr(('Your Name', 'you@fromyou.com')) to_recipients = ['person.1@email.com', 'person.2@email.com', 'person.3@email.com'] cc_recipient = 'cc.1@email.com' subject = 'To and CC' body_text = 'This mail was sent to many while CCing cc.1@email.com.' # 逐个发送给To收件人 for to_addr in to_recipients: msg = MIMEText(body_text) msg['From'] = from_addr msg['To'] = to_addr msg['CC'] = cc_recipient msg['Subject'] = subject ses_client.send_raw_email( Source=from_addr, Destinations=[to_addr], RawMessage={'Data': msg.as_string()} ) # 发送给CC收件人 cc_msg = MIMEText(body_text) cc_msg['From'] = from_addr cc_msg['To'] = ';'.join(to_recipients) cc_msg['CC'] = cc_recipient cc_msg['Subject'] = subject ses_client.send_raw_email( Source=from_addr, Destinations=[cc_recipient], RawMessage={'Data': cc_msg.as_string()} )
关键逻辑说明
- 邮件头中的
CC仅用于邮件显示,SES实际投递只依据Destinations参数,因此不会因为头信息触发额外投递 - 拆分发送后,总共执行
n+1次发送操作(n为To收件人数),但CC收件人仅收到1次邮件,完全匹配需求
内容的提问来源于stack exchange,提问作者Yash Patel
相关产品推荐
相关产品推荐

