我实际上开始考虑这个问题,是因为我忘了在应该发送的电子邮件中抄送某人,我希望他能获得一份副本而不会两次发送给其他人。我最终只是将其转发给他,但我仍然很好奇。
SMTP中的CC和BCC列表在哪里处理?您是否需要控制SMTP服务器,还是可以在客户端进行控制?
谢谢!
我实际上开始考虑这个问题,是因为我忘了在应该发送的电子邮件中抄送某人,我希望他能获得一份副本而不会两次发送给其他人。我最终只是将其转发给他,但我仍然很好奇。
SMTP中的CC和BCC列表在哪里处理?您是否需要控制SMTP服务器,还是可以在客户端进行控制?
谢谢!
Answers:
简而言之-是的,如果您可以直接连接到收件人SMTP服务器,则有可能。由于Rup在其答案中概述的原因,它可能不太实用,如果您位于防火墙后面的网络中,则可能根本无法通过TCP端口25与远程服务器建立连接。
假设这不适用于您,那么这里是详细信息:
当您(作为邮件客户端)连接到收件人的邮件服务器时,服务器所关心的(出于传递目的)就是在中指定的收件人RCPT TO:
。请参阅RFC2821-简单邮件传输协议。它不会区分收件人的类型(to:,cc:或密件抄送:),只是知道您在说“确保服务器上的收件人收到了此信息”。
但是,就收件人的实际邮件客户端而言,邮件中的标头说明了邮件的所有收件人是谁。请参阅RFC2822-Internet邮件格式。
换句话说,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: <test@mydomain.co.uk>
250 2.1.0 OK f70si17620845wej.110
RCPT TO: <user_i_missed_out@mydomain.co.uk>
250 2.1.5 OK f70si17620845wej.110
DATA
354 Go ahead f70si17620845wej.110
To: recipient_on_original@somewhere.com
cc: another_recipient_on_original@somewhere.com, user_i_missed_out@mydomain.co.uk
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.
最终的效果是user_i_missed_out@mydomain.co.uk
收到抄送清单上有他的电子邮件副本,以及原始收件人recipient_on_original@somewhere.com
和原始抄送收件人another_recipient_on_original@somewhere.com
。
但是,由于我们从未真正连接到后两个的邮件服务器,因此它们实际上并没有第二次收到电子邮件。而且由于我们无法更改之前已发送给他们的邮件,因此它们永远不会注意到我们添加了另一个抄送收件人。
发生的是
即,如果您可以将电子邮件注入3,直接传递到错过的CC用户的本地SMTP服务器,那么您可以将CC传递给他们,而不必将邮件发送给其他任何人。特别是,密件抄送收件人将获得根本不提及消息头的消息标头和正文(可能是“ X-Envelope-To”标头除外)。
但实际上,发送给每个人要容易得多。为了有效地做到这一点,您需要修改您的电子邮件客户端和本地SMTP服务器,以支持在收件人扩展期间处理的伪造的收件人列表或不真正发送至排除列表。
这个问题实际上是通过现有的IETF进行中的产品来解决的:Cosmetic Carbon Copy。不幸的是,我不知道任何实际实现CCC的电子邮件客户端,因为该草稿被普遍认为是愚人节的毫无用处的笑话。
说真的,您提出的要求是可能的,这主要是因为电子邮件的内容实际上并不影响SMTP层中向谁发送邮件。电子邮件客户端被编写为向“收件人”,“抄送”和“密件抄送”字段中的每个人发送邮件,但是按照任何标准,它们都不需要这样做。
已更新:确切地说,在将邮件发送到SMTP服务器时,发件人使用RCPT命令来指定将邮件传递到的电子邮件地址。然后,它使用DATA命令发送邮件的内容。SMTP服务器不应查看内容。应该可以在邮件的CC标题行中添加一个收件人,并要求SMPT服务器仅将其传递到该地址。
如果我理解正确,那么您尝试做的是第二次发送邮件,包括“收件人:”和“抄送:”标头中的原始收件人,但是只有其他收件人接收了该邮件。正如其他答案所指出的,这可以通过您的电子邮件客户端与SMTP服务器通信并仅指定一个收件人(但包括原始电子邮件的To:和Cc:标头)来实现。
在苹果的邮件客户端功能,可以做到有效这一点。该重定向功能可以在消息菜单中,或为消息上下文菜单中找到。此功能旨在用作在不向主题行添加Fwd:的情况下透明地将电子邮件转发给其他人的方式,也可以提高报价水平,但是它也可以用于以前发送的邮件。它使原始消息的“收件人/抄送/发件人”字段保持不变,并在“重新发送至”和“重新发送CC”标头中添加新的收件人。重新发送邮件的唯一收件人将是您在编写邮件时指定的收件人。使用此功能时,如何工作尚不完全清楚,因此请确保事先进行测试。