SendGrid多收件人场景下含+符号重复邮箱仅发一封问题
SendGrid
is_multiple=True 下同一邮箱+变体仅发送一封的问题 我使用SendGrid的is_multiple=True参数批量发送邮件,原本功能正常,但当收件人包含同一主邮箱的带+符号变体(比如abc@gmail.com和abc+test@gmail.com)时,只能成功发送其中一封。用Gmail直接给这两个地址发信能正常收到两封,但SendGrid只发一封。相关代码如下:
message = Mail( from_email=From(self.sender, "Test"), to_emails=all_recipients, is_multiple=True, )
all_recipients = [ To( email=recipient["email"], dynamic_template_data=recipient["template_data"], ) for recipient in recipients_and_template_data ]
问题原因
SendGrid默认会对收件人地址进行去重处理,它会忽略邮箱地址中+后面的后缀部分,将abc+test@gmail.com和abc@gmail.com判定为同一个收件人,因此只会发送一次邮件。而Gmail本身支持+后缀的别名机制,会将这类地址视为独立收件地址投递。
解决方法
要绕过这个去重逻辑,有两种可行方案:
方案一:为每个收件人单独创建邮件发送
循环遍历收件人列表,为每个地址单独生成Mail对象并发送,确保每个投递请求都是独立的:
from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import Mail, From, To sg = SendGridAPIClient("你的SendGrid API密钥") for recipient in recipients_and_template_data: message = Mail( from_email=From(self.sender, "Test"), to_emails=To( email=recipient["email"], dynamic_template_data=recipient["template_data"], ), template_id="你的动态模板ID" # 如果使用了动态模板 ) try: response = sg.send(message) print(f"发送至 {recipient['email']} 成功,状态码:{response.status_code}") except Exception as e: print(f"发送至 {recipient['email']} 失败:{str(e)}")
方案二:使用独立的Personalization块批量发送
通过为每个收件人创建独立的Personalization条目,保持批量发送的效率同时避免地址去重:
from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import Mail, From, Personalization, To message = Mail(from_email=From(self.sender, "Test")) message.template_id = "你的动态模板ID" # 为每个收件人添加独立的个性化设置 for recipient in recipients_and_template_data: personalization = Personalization() personalization.add_to(To(email=recipient["email"])) personalization.dynamic_template_data = recipient["template_data"] message.add_personalization(personalization) sg = SendGridAPIClient("你的SendGrid API密钥") try: response = sg.send(message) print(f"批量发送成功,状态码:{response.status_code}") except Exception as e: print(f"批量发送失败:{str(e)}")
这种方式下,每个收件人对应一个独立的投递条目,SendGrid会将它们视为不同的目标地址,确保abc@gmail.com和abc+test@gmail.com都能收到邮件。
内容的提问来源于stack exchange,提问作者ManojPrabhakar M
相关产品推荐
相关产品推荐

