You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:51:44