我之所以开始考虑这个问题,是因为我忘记在一封我应该发送的电子邮件中抄送给某人,我想让他收到一份副本,而不必重复发送给其他人。最后我只是转发给了他,但我仍然很好奇。
SMTP 中的 CC 和 BCC 列表在哪里处理?您是否需要控制 SMTP 服务器,还是可以在客户端完成?
谢谢!
答案1
简而言之 - 是的,如果您可以直接连接到收件人的 SMTP 服务器,这是可能的。原因如下Rup 在他的回答中概述它可能不是特别实用,并且如果您位于防火墙后面的网络上,您可能根本无法通过 TCP 端口 25 与远程服务器建立连接。
假设这不适用于您,那么详细信息如下:
当您(作为邮件客户端)连接到收件人的邮件服务器时,该服务器所关心的(出于投递目的)只是 中指定的收件人RCPT TO:
。请参阅RFC2821 - 简单邮件传输协议。它不区分收件人的类型(收件人:、抄送:或密件抄送:),它只知道您在说“确保您服务器上的收件人收到此邮件”。
但是,就收件人的实际邮件客户端而言,邮件中的标题会说明邮件的所有收件人是谁。请参阅RFC2822 - 互联网消息格式。
换句话说,TO:、CC: 和 BCC: 标头是为了邮件客户端的方便,而实际的分发是在与邮件服务器的 SMTP“对话”期间处理的。
因此,您实际上可以与 SMTP 服务器进行如下对话:
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.
最终结果是,他[email protected]
会收到一份电子邮件副本,其中抄送列表中有他本人以及原始收件人[email protected]
和原始抄送收件人[email protected]
。
但是,由于我们从未真正连接到后两者的邮件服务器,因此他们实际上并没有第二次收到电子邮件。而且由于我们无法更改之前已发送给他们的邮件,因此他们永远不会注意到我们添加了另一个抄送收件人。
答案2
发生的事情是
- 您将电子邮件发送到本地(或 ISP)的 SMTP 服务器
- 您的本地 SMTP 服务器会扩展收件人列表,并计算出需要与所有收件人通信的服务器列表。它会从邮件中删除 BCC 标头。
- 对于每个服务器,它都会连接并说“这是一封给收件人 X、Y 的电子邮件:这是邮件头和正文”
即,如果您可以将电子邮件注入 3,直接发送到未收到抄送的用户的主 SMTP 服务器,那么您就可以向他们发送抄送,而不必将邮件发送给其他所有人。特别是,密件抄送收件人将获得完全不提及他们的邮件标题和正文(可能除了“X-Envelope-To”标题)。
但实际上,发送给所有人要容易得多。要有效地做到这一点,您需要修改电子邮件客户端和本地 SMTP 服务器,以支持虚假收件人列表或不真正发送给排除列表,它会在收件人扩展期间进行处理。
答案3
这个问题实际上已经由现有的 IETF 正在进行的工作解决了:化妆品复本。不幸的是,我不知道有哪个电子邮件客户端真正实现了CCC,因为该草案被广泛认为是愚人节的无意义的玩笑。
严肃地说,您问的问题确实存在,主要是因为电子邮件的内容实际上并不影响在 SMTP 层将邮件发送给谁。电子邮件客户端被设计为将邮件发送给收件人、抄送和密送字段中的每个人,但任何标准都不要求它们这样做。
更新:确切地说,当向 SMTP 服务器发送邮件时,发件人使用 RCPT 命令指定应将邮件发送到哪些电子邮件地址。然后,它使用 DATA 命令发送邮件的内容。SMTP 服务器不应该查看内容。应该可以将一个收件人添加到邮件的 CC 标题行,并要求 SMPT 服务器仅将其发送到该地址。
答案4
它可能根据客户端的不同而允许/禁止,但您可以尝试在收件人中放入一些虚假内容(例如“;;未公开的收件人;;”),并将所有人放入密件抄送中。然后重复该过程将使其看起来像同一封电子邮件,只要没有人密切关注时间戳和主题消息等。