Yesterday I sent a confidential (not that much, really) email to a few contacts and wanted to hide the addressees of the email so I decided to put them all in Bcc: and leave only my personal address in the To: field. I think it's a pretty common way to act.
I don't know why but I also put another self-owned email address into the Bcc: field, a @gmail.com account.
After I sent the email I looked at it with the Gmail's web interface and... Big surprise! Every addressee placed in the Bcc: list was there! I mean... I had address1@example.com, address2@example.org and me@gmail.com into the Bcc: list, To: my@example.net, From: my@example.net and I was seeing all the addresses into the mail received on me@gmail.com! That was not expected and worth a little investigation.
What came up is really interesting. Read RFC 822 (which is STD0011):
4.5.3. BCC / RESENT-BCC
This field contains the identity of additional recipients of
the message. The contents of this field are not included in
copies of the message sent to the primary and secondary reci-
pients. Some systems may choose to include the text of the
"Bcc" field only in the author(s)'s copy, while others may
also include it in the text sent to all those indicated in the
"Bcc" list.
I found this damn interesting. It means that while most systems remove the Bcc: lines completely this is not required! The only required thing is to remove it from copies sent to To: and Cc: addresses. That said, the conclusion: Bcc: must not be used to hide the list of addresses.
Also note that proposed standard mentioned in RFC 2822 leaves this behavior unmodified, leaving to the implementation weather to remove the line or not.
But who is responsible for this glitch? It happens only when I send email from my home account to Gmail, not to nor from other accounts.
The culprit is the mutt-exim pair. Mutt doesn't remove the Bcc: line from outgoing mail, as it's not required to do it. Exim behaves the same way. Intermediate servers don't touch the message and it reaches the @gmail.com mailbox with the Bcc: list intact, the same happens with @mailinator.com. Interesting enough other domains put into the Bcc: list don't get this header (tried with @tiscali.it), I'm wondering who removes this header.
There are a lot of links suggesting solutions, e.g. this but you should be warned about two things. First of all that not standard, you're mangling a message without any valid reason. In second place this doesn't resolve all problems.
Mails addressed to multiple addresses into the same domain are delivered with the same connection, just using the RCPT TO: SMTP command multiple times and this could lead to address leakage on particular systems that displays the SMTP session to the end-user. I agree that they shouldn't be that common but the one I used for test beside tiscali.it and gmail.com does this. Try yourself: send an email with random To: address and place into the Bcc: list more than one @mailinator.com addresses, then go and check one of the mailinator mailboxes, open your test message and click on (text view). Voilà! Your SMTP session is there, showing multiple supposed-to-be-hidden addresses.
In the end: don't use Bcc: to send emails without revealing the destination addresses it's not intended to do that.