开发者

Bcc Field in SMTP [ showing/not showing ] problem

I'm trying to use python's smtplib to send, via gmail, an em开发者_如何学运维ail with bcc addresses. I use this code:

#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...

-> When I go to the respective Inboxs I get the same message for all the addresses in [to+cc+bcc], wich is right. But

what i would like to happen was that each bcc address got a bcc field with its own address in it, just like is described in here for the web interface of gmail.

This is what I wish to accomplish:

Cc and To Inboxes:

To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
(...)

recpt3 Inbox:

To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
Bcc: recpt3@destinationBcc.com
(...)

recpt4 Inbox:

To: recpt1@destinationTo.com
From: sender@origin.com
Cc: recpt2@destinationCc.com
Bcc: recpt4@destinationBcc.com
(...)

Has anyone managed to get this working? I've been looking in the smtp rfc documents and I've found nothing, I dont understand how gmail can do it


My guess would be that gmail does a separate SMTP session for each BCC recipient. If everything between your two comments were a function dosend(fromAddr, toAddr, content, to, cc, bcc=None) you might do something like this:

dosend(fromAddr, to+cc, content, to, cc)
for t in bcc:
    dosend(fromAddr, t, content, to, cc, t)

That would send it once to the to and cc address(es), then send it again to each bcc address individually, with the appropriate bcc header. Just to clarify what dosend does: the fromAddr and toAddr arguments are for the envelope (the first and second arguments to server.sendmail). The to, cc, and (optional) bcc arguments are for the headers in msg. (Your code doesn't add a Bcc, you would need to add that if the optional argument bcc is provided.)

(Edit: I deleted my comments about the possibility it might use X-Bcc. I just tried it, and it works as described above. I also fixed up and clarified the description of dosend.)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜