实际上我开始考虑这个是因为我忘记在我应该发送的电子邮件中抄送某人,我希望他能得到一份副本,而不会重复发送给其他人。我最后只是把它转发给他,但我仍然很好奇。
SMTP 中在哪里处理抄送和密件抄送列表?您需要控制 SMTP 服务器,还是可以在客户端完成?
谢谢!
小智 20
简而言之 - 是的,如果您可以直接连接到收件人 SMTP 服务器,则是可能的。由于Rup 在他的回答中概述的原因,它可能不是特别实用,如果您在防火墙后面的网络上,您可能根本无法通过 TCP 端口 25 连接到远程服务器。
假设这不适用于您,那么这里是详细信息:
当您(作为邮件客户端)连接到收件人的邮件服务器时,该服务器所关心的(出于传递目的)都是RCPT TO:
. 请参阅RFC2821 - 简单邮件传输协议。它不区分收件人的类型(to:、cc: 或 bcc:),它只知道您在说“确保您服务器上的收件人收到此信息”。
但是,就收件人的实际邮件客户端而言,邮件中的标题说明了邮件的所有收件人是谁。请参阅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.
Run Code Online (Sandbox Code Playgroud)
最终效果是user_i_missed_out@mydomain.co.uk
收到一封电子邮件的副本,其中包含他在抄送列表中以及原始收件人recipient_on_original@somewhere.com
和原始抄送收件人another_recipient_on_original@somewhere.com
。
但是,由于我们从未真正连接到后两者的邮件服务器,因此他们实际上不会第二次收到电子邮件。而且由于我们无法更改之前已经发送给他们的邮件,他们永远不会注意到我们添加了另一个抄送收件人。
发生的情况是
即,如果您可以将电子邮件注入 3,直接发送到错过的 CC 用户的家庭 SMTP 服务器,那么您可以将 CC 发送给他们,而不必将邮件发送给其他人。特别是,BCC 收件人将获得根本不提及它们的邮件标头和正文(可能除了“X-Envelope-To”标头)。
但实际上,发送给每个人要容易得多。为了有效地做到这一点,您需要修改您的电子邮件客户端和本地 SMTP 服务器以支持在收件人扩展期间处理的虚假收件人列表或不真正发送到的排除列表。
归档时间: |
|
查看次数: |
34264 次 |
最近记录: |