SMTP中的密件抄送字段[显示/不显示]问题

时间:2011-07-03 17:40:32

标签: python smtp gmail bcc

我正在尝试使用python的smtplib通过 gmail 发送一封带有密件抄送地址的电子邮件。 我使用这段代码:

#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]中所有地址的相同消息,这是对的。但

我想要发生的是每个密件抄送地址都有一个带有自己地址的密件抄送字段,就像在here中描述的 gmail 的网页界面一样。 / p>

这就是我想要实现的目标:

抄送和收件箱:

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 rfc文件,我什么都没找到,我不明白gmail是如何做到的

1 个答案:

答案 0 :(得分: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)

这会将其发送到tocc地址,然后使用相应的密送头再次将其再次发送到每个bcc地址。只是为了澄清剂量的作用:fromAddrtoAddr参数用于包络(server.sendmail的第一和第二个参数)。 tocc和(可选)bcc参数适用于msg中的标头。 (您的代码不会添加密件抄送,如果提供了可选参数bcc,则需要添加密码。)

(编辑:我删除了关于它可能使用X-Bcc的可能性的评论。我只是尝试了它,它的工作原理如上所述。我还修复并澄清了dosend的描述。)