SMTP:是否可以抄送某人而不发送原始邮件?


24

我实际上开始考虑这个问题,是因为我忘了在应该发送的电子邮件中抄送某人,我希望他能获得一份副本而不会两次发送给其他人。我最终只是将其转发给他,但我仍然很好奇。

SMTP中的CC和BCC列表在哪里处理?您是否需要控制SMTP服务器,还是可以在客户端进行控制?

谢谢!

email  smtp 

5
为什么要对此表示不满?毕竟这是一个有趣的问题……

5
@Achilles-是否可行的细节绝对是编程问题恕我直言。它是在RFC 2821和2822中定义的。最终,所有这些邮件客户端都根据这些定义进行了编程,并且这里的每个开发人员都可能不得不在某个时候深入研究SMTP。我当然有

3
请停止投票以将其关闭,因为它属于“属于SuperUser”。仅仅因为OP表示发送电子邮件使他开始思考该问题,这并没有使实际问题“与编程无关”。如果我在单击Web链接时遇到一个http实施问题,那是否“与编程无关”?号

Answers:


17

简而言之-是的,如果您可以直接连接到收件人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

但是,由于我们从未真正连接到后两个的邮件服务器,因此它们实际上并没有第二次收到电子邮件。而且由于我们无法更改之前已发送给他们的邮件,因此它们永远不会注意到我们添加了另一个抄送收件人。


4

发生的是

  1. 您将电子邮件发送到本地(或ISP的)SMTP服务器
  2. 您的本地SMTP服务器将展开收件人列表,并为所有收件人列出需要与之对话的服务器列表。它从消息中删除BCC标头。
  3. 对于每个服务器,它都会连接并说“这是给收件人X,Y的电子邮件:这是邮件标题和正文”

即,如果您可以将电子邮件注入3,直接传递到错过的CC用户的本地SMTP服务器,那么您可以将CC传递给他们,而不必将邮件发送给其他任何人。特别是,密件抄送收件人将获得根本不提及消息头的消息标头和正文(可能是“ X-Envelope-To”标头除外)。

但实际上,发送给每个人要容易得多。为了有效地做到这一点,您需要修改您的电子邮件客户端和本地SMTP服务器,以支持在收件人扩展期间处理的伪造的收件人列表或不真正发送至排除列表。


2

这个问题实际上是通过现有的IETF进行中的产品来解决的:Cosmetic Carbon Copy。不幸的是,我不知道任何实际实现CCC的电子邮件客户端,因为该草稿被普遍认为是愚人节的毫无用处的笑话。

说真的,您提出的要求是可能的,这主要是因为电子邮件的内容实际上并不影响SMTP层中向谁发送邮件。电子邮件客户端被编写为向“收件人”,“抄送”和“密件抄送”字段中的每个人发送邮件,但是按照任何标准,它们都不需要这样做。

已更新:确切地说,在将邮件发送到SMTP服务器时,发件人使用RCPT命令来指定将邮件传递到的电子邮件地址。然后,它使用DATA命令发送邮件的内容。SMTP服务器不应查看内容。应该可以在邮件的CC标题行中添加一个收件人,并要求SMPT服务器仅将其传递到该地址。


0

如果我理解正确,那么您尝试做的是第二次发送邮件,包括“收件人:”和“抄送:”标头中的原始收件人,但是只有其他收件人接收了该邮件。正如其他答案所指出的,这可以通过您的电子邮件客户端与SMTP服务器通信并仅指定一个收件人(但包括原始电子邮件的To:和Cc:标头)来实现。

苹果的邮件客户端功能,可以做到有效这一点。该重定向功能可以在消息菜单中,或为消息上下文菜单中找到。此功能旨在用作在不向主题行添加Fwd:的情况下透明地将电子邮件转发给其他人的方式,也可以提高报价水平,但是它也可以用于以前发送的邮件。它使原始消息的“收件人/抄送/发件人”字段保持不变,并在“重新发送至”和“重新发送CC”标头中添加新的收件人。重新发送邮件的唯一收件人将是您在编写邮件时指定的收件人。使用此功能时,如何工作尚不完全清楚,因此请确保事先进行测试。


-1

可以逐个客户端允许/禁止它,但是您可以尝试在“收件人”中放置伪造的东西(例如“ ;;未公开的收件人;;”),并将每个人放置在密件抄送中。然后重复该过程将使它看起来像一封电子邮件,只要没有人足够密切地关注时间戳和线程化消息等即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.