SMTP中的Bcc字段[显示/不显示]问题
我正在尝试使用Python的smtplib通过gmail发送一封包含密件抄送(bcc)地址的邮件。我的代码是:
#imports etc...
fromAddr = sender@origin.com
to = [ recpt1@destinationTo.com ]
cc = [ recpt2@destinationCc.com ]
bcc = [ recpt3@destinationBcc.com, recpt4@destinationBcc.com ]
server = SMTP( "smtp.gmail.com", 587)
#starttls, login, etc..
content = "Hello, this is a message."
msg = "From: %s\r\nTo:%s\r\nCc: %s\r\n\r\n%s" % ( from, to, cc, content )
server.sendmail( fromAddr, to + cc + bcc, msg )
#server.quit() etc...
-> 当我查看各个收件箱时,所有在[to+cc+bcc]中的地址都收到了相同的消息,这没问题。但是
我希望每个bcc地址都能在邮件中看到自己的地址,就像在gmail的网页界面中描述的那样,具体可以参考这里。
这是我想要实现的效果:
抄送和收件箱:
To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
(...)
recpt3的收件箱:
To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
Bcc: recpt3@destinationBcc.com
(...)
recpt4的收件箱:
To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
Bcc: recpt4@destinationBcc.com
(...)
有没有人成功实现这个功能?我查阅了smtp的相关文档,但没有找到任何信息,我不明白gmail是怎么做到的。
1 个回答
1
我猜,Gmail 对每个密件抄送(BCC)收件人都会单独建立一个 SMTP 会话。如果把你提到的两个评论之间的内容看作一个函数 dosend(fromAddr, toAddr, content, to, cc, bcc=None)
,你可以这样做:
dosend(fromAddr, to+cc, content, to, cc)
for t in bcc:
dosend(fromAddr, t, content, to, cc, t)
这样就会先把邮件发送给 to
和 cc
地址,然后再分别发送给每个 bcc
地址,并加上相应的 BCC 头信息。为了更清楚地说明 dosend
的作用:fromAddr
和 toAddr
是用来设置邮件的发件人和收件人(这两个是 server.sendmail
的第一个和第二个参数)。而 to
、cc
和(可选的)bcc
是用来设置邮件内容中的头信息的。 (你的代码没有添加 Bcc,如果提供了可选参数 bcc
,你需要自己加上。)
(编辑:我删掉了关于可能使用 X-Bcc 的评论。我刚试了一下,确实如上所述工作。我也修正并澄清了 dosend
的描述。)