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
.)
精彩评论