Django:如何用send_mass_mail让收件人仅看到自身邮箱
实现每个收件人仅看到自己邮箱在「To」字段的解决方案
嘿,这个问题我之前帮不少开发者踩过坑——send_mass_mail本身的设计逻辑就决定了它没法直接实现你的需求:它是把同一封邮件内容批量推送给多个收件人,所以要么把所有收件人都列在To里,要么就得用盲抄送(BCC)让To字段为空。但要让每个收件人看到自己的邮箱单独出现在To里,其实有两种靠谱的替代方案:
方案一:循环发送单个邮件(适合小批量收件人)
如果你的收件人数量不多(比如几十人以内),最简单直接的方式就是循环给每个收件人单独发邮件,每一封邮件的To字段只填当前收件人的邮箱:
from django.core.mail import send_mail # 收件人列表 recipients = ['jack@gmail.com', 'jane@gmail.com'] subject = "专属通知:你的邮件内容" message = "这封邮件只有你能看到自己在收件人里哦" from_email = "your-service@example.com" # 循环发送,每个收件人对应单独的邮件 for recipient in recipients: send_mail(subject, message, from_email, [recipient])
这种方法的优点是零学习成本,完全符合你的需求;缺点是如果收件人数量过百,每次发送都会重新建立SMTP连接,效率会比较低。
方案二:用EmailMessage批量构建个性化邮件(适合大批量收件人)
如果需要给几百上千人发邮件,推荐用Django的EmailMessage类配合连接池来发送,这样只需要建立一次SMTP连接,就能批量发送所有个性化邮件:
from django.core.mail import EmailMessage, get_connection recipients = ['jack@gmail.com', 'jane@gmail.com'] subject = "专属通知:你的邮件内容" message = "这封邮件只有你能看到自己在收件人里哦" from_email = "your-service@example.com" # 获取SMTP连接对象 connection = get_connection() # 存放所有个性化邮件实例 messages = [] for recipient in recipients: # 为每个收件人创建单独的邮件,To字段仅填当前收件人 msg = EmailMessage( subject, message, from_email, [recipient], connection=connection ) messages.append(msg) # 批量发送所有邮件 connection.send_messages(messages)
这个方法兼顾了个性化需求和发送效率,是处理大批量个性化邮件的最优解。
关于send_mass_mail的补充说明
如果你一定要纠结用send_mass_mail,那很遗憾——它确实做不到。因为它的recipient_list参数是全局统一的,所有邮件的To字段要么显示整个列表,要么你把recipient_list设为空、用bcc参数传收件人,这样To字段就会是空的,和你之前遇到的怪异效果一样。所以想要实现每个收件人看到自己的邮箱在To里,必须跳出send_mass_mail的限制,用上面两种方案。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

