我的知识记录

Python邮件抄送密送cc bcc设置方法

用Python smtplib发送邮件时同时设置抄送cc和密送bcc,说明两者区别、头部字段写法、sendmail收件人列表传递规则,附完整代码。

场景痛点

发正式邮件要给主送人发,同时抄送领导留痕,还要密送几个人不让其他人看到地址。手工在网页邮箱里填cc、bcc框容易漏人,用Python一次性把三种人都配好,发出去谁收谁收、谁被抄谁被密,清清楚楚。

用到的库

# smtplib/email标准库,无需安装

完整代码

# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header

SMTP_SERVER = "smtp.qq.com"
SMTP_PORT = 465
SENDER = "your_account@qq.com"
AUTH_CODE = "your_smtp_auth_code"

TO = ["alice@example.com", "bob@example.com"]          # 主送人
CC = ["manager@example.com"]                            # 抄送
BCC = ["secret@example.com"]                            # 密送


def send_with_cc_bcc():
msg = MIMEText("这是一封同时带抄送和密送的测试邮件。", "plain", "utf-8")
msg["From"] = Header(f"我 <{SENDER}>", "utf-8")
# 头部里To和CC用逗号拼接显示;BCC绝对不能写进头部,否则就不叫密送了
msg["To"] = Header(", ".join(TO), "utf-8")
msg["Cc"] = Header(", ".join(CC), "utf-8")
msg["Subject"] = Header("抄送密送测试", "utf-8")

# 关键:真正收到邮件的人 = To + Cc + BCC,全都要传进sendmail的第二个参数
all_receivers = TO + CC + BCC

server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
server.login(SENDER, AUTH_CODE)
server.sendmail(SENDER, all_receivers, msg.as_string())
server.quit()
print("发送成功")


if __name__ == "__main__":
send_with_cc_bcc()

代码讲解

  • Cc和BCC的区别:Cc(抄送)的邮箱会显示在邮件头部,所有收件人都能看到;BCC(密送)的邮箱不会出现在头部,其他收件人看不到。
  • BCC不要写进msg头部:一旦写进msg["Bcc"],邮件正文头部就会带上这个地址,等于没密送。只把BCC邮箱加进sendmail的收件人列表就行。
  • sendmail第二个参数是真正收到这封邮件的所有人,跟头部里To/Cc写谁没关系。很多人只在头部写To,忘了把CC/BCC加进列表,结果CC和BCC的人根本收不到。
  • 头部里多人地址用逗号加空格拼接,例如"a@x.com, b@x.com"

运行结果

Alice和Bob在收件人位置看到Manager被抄送,看不到Secret;Secret邮箱里能收到这封邮件,但看不到其他任何人的地址。

注意事项

  • BCC适合用在大批量群发场景:收件人互相看不到对方邮箱,避免泄露通讯录、也避免所有人点"回复全部"。
  • 有些人用BCC发营销邮件,邮箱服务商可能会检测并判为垃圾邮件,企业大批量群发建议用专门服务。
  • 如果想做"收件人互相看不到"的群发,更规范的做法是:To只写自己或一封占位地址,所有人都放BCC,逐封发或一封批量BCC发。
  • Cc和BCC可以为空列表,但不能传None。

Python邮件抄送密送cc bcc设置方法

标签:

更新时间:2026-09-14 21:11:58

上一篇:Python邮件正文嵌入图片 内联图片教程

下一篇:Python自动下载邮件附件 imaplib实战