Bcc Field in SMTP [ showing/not showing ] problem
Question: 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](http://mail.google.com/support/bin/answer.py?answer=57143) 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


Answer: 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`.)

