I’m trying to use python’s smtplib to send, via gmail, an email 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:That would send it once to the
toandccaddress(es), then send it again to eachbccaddress individually, with the appropriate bcc header. Just to clarify what dosend does: thefromAddrandtoAddrarguments are for the envelope (the first and second arguments toserver.sendmail). Theto,cc, and (optional)bccarguments are for the headers inmsg. (Your code doesn’t add a Bcc, you would need to add that if the optional argumentbccis 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.)