SMTP: Is it possible to CC someone without sending the original?

In short - yes it is possible if you can connect directly to the recipients SMTP server. For the reasons Rup outlines in his answer it may not be especially practical, and if you are on a network behind a firewall you may not be able to get a connection to a remote server on TCP port 25 at all.

Assuming this doesn't apply for you, then here is the detail:

When you (as a mail client) connect to the recipient's mail server, all that server cares about (for delivery purposes) are the recipients specified in RCPT TO:. See RFC2821 - Simple Mail Transfer Protocol. It doesn't differentiate between the type of recipient (to:, cc: or bcc:), it just knows you are saying "make sure the recipient on your server receives this".

However, as far as the recipient's actual mail client is concerned, it is the headers in the message that say who all the recipients of the message were. See RFC2822 - Internet Message Format.

In other words, the TO:, CC: and BCC: headers are there for the benefit of the mail client, whereas the actual distribution is handled during the SMTP 'conversation' with the mail servers.

So you can, in fact, have a conversation with an SMTP server that looks something like this:

C:>telnet aspmx.l.google.com 25
220 mx.google.com ESMTP f70si17620845wej.110
HELO myserver.mydomain.co.uk
250 mx.google.com at your service
MAIL FROM: <[email protected]>
250 2.1.0 OK f70si17620845wej.110
RCPT TO: <[email protected]>
250 2.1.5 OK f70si17620845wej.110
DATA
354  Go ahead f70si17620845wej.110
To: [email protected]
cc: [email protected], [email protected]
Subject: My email

Hi - this is a test
.
250 2.0.0 OK 1277401976 f70si17620845wej.110
QUIT
221 2.0.0 closing connection f70si17620845wej.110


Connection to host lost.

The net effect is that [email protected] receives a copy of the email that has him on the cc list as well as the original addressee [email protected], and the original cc recipient [email protected].

However, since we never actually connected to the latter two's mail servers, they don't actually receive the email second time around. And since we cannot change the mails that have already been sent off to them before, they will never notice that we added another cc recipient.


What happens is

  1. You send the email to your local (or ISP's) SMTP server
  2. Your local SMTP server expands out the recipient list and works out the list of servers it will need to talk to for all the recipients. It removes the BCC header from the message.
  3. For each server, it connects and says "Here is an email for recipients X, Y: here is the message headers and body"

i.e. if you can inject the email into 3, deliver directly to the missed CC user's home SMTP server, then you can deliver them the CC without having to send the mail to everyone else. In particular a BCC recipient will get message headers and body that do not mention them at all (except maybe an 'X-Envelope-To' header).

In practical terms, though, it's a lot easier to send to everyone. To do this efficiently you'd need to modify your email client and local SMTP server to support a fake recipient list, or a don't-really-send-to exclusion list, that it processes during recipient expansion.


This problem is actually solved by an existing IETF work-in-progress: the Cosmetic Carbon Copy. Unfortunately, I don't know of any email client that actually implements CCCs, as the draft is widely considered to be a pointless joke for April Fool's Day.

In all seriousness, what you're asking is possible, mostly because the content of an email doesn't actually affect who the mail is sent to at the SMTP layer. Email clients are written to send mail to everyone in the To, CC, and BCC fields, but they aren't required to do this by any standard.

Updated: To be precise, when sending mail to an SMTP server, the sender uses the RCPT command to specify which email addresses a message should be delivered to. It then sends the contents of the mail with a DATA command. The SMTP server shouldn't look at the content. It should be possible to add one recipient to the CC header line of a message and ask the SMPT server deliver it to only that one address.