4

我正在尝试使用 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] 中的所有地址,我都会收到相同的消息,这是正确的。但

我想要发生的是每个密件抄送地址都有一个密件抄送字段,其中包含自己的地址,就像这里描述的gmail的 Web 界面一样。

这是我希望完成的:

抄送和收件箱:

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 是如何做到的

4

1 回答 1

1

我的猜测是 gmail 为每个密件抄送收件人执行单独的 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单独发送到每个地址,并带有适当的密件抄送标头。只是为了澄清 dosend 的作用:fromAddrandtoAddr参数用于信封(的第一个和第二个参数server.sendmail)。、tocc(可选)bcc参数用于msg. (您的代码没有添加密件抄送,如果bcc提供了可选参数,则需要添加。)

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

于 2011-07-03T17:59:05.363 回答