我试图使用python的smtplib通过gmail发送一封包含bcc地址的电子邮件。
我使用这个代码:

#imports etc...
fromAddr = [email protected]
to = [ [email protected] ]
cc = [ [email protected] ]
bcc = [ [email protected], [email protected] ]
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]中,wich是对的。但是
我希望每个bcc地址都有一个bcc字段,其中有自己的地址,就像在gmail的web界面中的here中所描述的那样。
这就是我希望完成的:
抄送至收件箱:
To: [email protected]
From: [email protected]
Cc: [email protected]
(...)

Recpt3收件箱:
To: [email protected]
From: [email protected]
Cc: [email protected]
Bcc: [email protected]
(...)

recpt4收件箱:
To: [email protected]
From: [email protected]
Cc: [email protected]
Bcc: [email protected]
(...)

有人成功地把这个工作了吗?我一直在看smtp的rfc文档,但什么也没找到,我不明白gmail是怎么做到的。

最佳答案

我的猜测是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)

这会将它发送一次到tocc地址,然后使用适当的bcc头分别再次发送到每个bcc地址为了澄清dosend的作用:fromAddrtoAddr参数是信封的参数(第一个和第二个参数是server.sendmailtocc和(可选)bcc参数用于msg中的头。(您的代码没有添加bcc,如果提供了可选参数bcc,则需要添加bcc。)
(编辑:我删除了关于它可能使用X-Bcc的评论我刚刚试了一下,效果如上所述我还修正并澄清了dosend的描述。

07-25 23:53