问题:
是否可以不向抄送/密件抄送收件人看到的收件人发送电子邮件?
换句话说:是否可以通过抄送或密件抄送发送电子邮件,但不能发送给收件人(即"收件人"标题字段中的收件人)?
示例:
Andrew希望Bob在没有实际发送给Alice:的情况下接收以下任何一封电子邮件
from: Andrew
to: Alice
或
from: Andrew
to: Alice
cc: Bob
这可能吗?
我对主题的理解很差,但从我的阅读来看,发件人(Andrew)似乎不得不为to
和envelope-to
字段使用不同的收件人,但我不知道如何实现这一点。
发件人(Andrew)是否不可避免地必须建立自己的邮件服务器才能实现这一点,或者是否有更简单的解决方案?
To
、From
、CC
甚至BCC
只是电子邮件中的标题。你可以输入你想要的任何内容,至少如果你使用一个可以控制电子邮件标题的库。
让我们做一个非常简单的例子,使用telnet发送电子邮件。
首先,查找哪些电子邮件服务器处理域(此处为gmail.com)的邮件,例如使用host
:
robert@here:~$ host gmail.com
gmail.com has address 142.250.115.19
gmail.com has address 142.250.115.83
gmail.com has address 142.250.115.17
gmail.com has address 142.250.115.18
gmail.com has IPv6 address 2607:f8b0:4000:803::2005
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
gmail.com mail is handled by 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 20 alt2.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 40 alt4.gmail-smtp-in.l.google.com.
我将使用第一个给定的电子邮件服务器,gmail-smtp-in.l.google.com。根据RFC 5321,你可以连接到邮件服务器并发送这样的电子邮件:
robert@here:~$ telnet gmail-smtp-in.l.google.com 25
Trying 142.250.138.27...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP v9si1145647ooe.55 - gsmtp
以数字开头的每一行都是SMTP服务器的回复。200s中的代码是可以的,400是临时错误,500是永久错误。
接下来你说";你好";,或者更确切地说;延伸问候";(ehlo),服务器用它支持的所有扩展进行回复:
ehlo me
250-mx.google.com at your service, [1.2.3.4]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
然后,使用mail from:
命令告诉服务器您要发送电子邮件,并告诉它SMTP信封发件人电子邮件地址。如果服务器接受了电子邮件,它会再次回复以200s代码开头的内容。
mail from: <me@example.org>
250 2.1.0 OK v9si1145647ooe.55 - gsmtp
然后你给SMTP信封收件人,服务器会再次接受200s代码:
rcpt to: <smtp-env@example.org>
250 2.1.5 OK v9si1145647ooe.55 - gsmtp
接下来是data
命令,服务器用354代码确认该命令,告诉您输入消息:
data
354 Go ahead v9si1145647ooe.55 - gsmtp
电子邮件由标题、空行和正文组成。下面的例子非常简单,但应该有效。您可以指定From:
标头、To:
,可能是CC:
或BCC:
(原文如此!)标头,当然还有Subject:
、Date:
和其他标头。
From: me
To: you
CC: me again
Subject: test
Hello, this is a test.
在这里,您可以看到4个标题(From
、To
、CC
和Subject
),后面是分隔标题和电子邮件正文的空行,然后是正文,这只是一行。
以一行上的单点结束电子邮件:
.
250 2.0.0 OK 1619472375 v9si1145647ooe.55 - gsmtp
服务器现在已经接受了该消息,应该发送或退回它。您现在可以发送另一封电子邮件(从上面的mail from:
开始)或结束对话框:
quit
221 2.0.0 closing connection v9si1145647ooe.55 - gsmtp
Connection closed by foreign host.
如您所见,我已输入smtp-env@example.org
作为SMTP信封收件人电子邮件地址。这才是最重要的,这才是真正发送电子邮件的地方。没有什么可以阻止您在不为人员指定rcpt-to:
的情况下将人员添加到CC:
或BCC:
行。他们不会收到电子邮件,但会根据实际收到电子邮件的收件人的要求,这些人也应该收到电子邮件。没有什么可以阻止您在To:
标头中添加与rcpt-to:
命令中使用的不同的电子邮件地址。
通常,MUA会添加与SMTP信封地址匹配的To:
或CC:
标头,但这不是必需的。但是,如果没有这些标头,或者标头与SMTP信封命令不匹配,可能会给您带来一些垃圾邮件点数。
在许多情况下,您不需要用户名或密码。这是故意的。例如,你是一个gmail用户,想在yahoo.com上向某人发送邮件。你需要你的gmail用户名和密码才能登录你的gmaail帐户,但你不需要yahoo.com的帐户就可以向有yahoo.com帐户的人发送电子邮件。如果你被要求登录你想发送到的每一个电子邮件服务器,你就必须有大量的用户名和密码!这是电子邮件的一个优势,它是开放的,免费的,每个人都可以运行服务器并发送和接收电子邮件。
Du kannst Dir die Welt machen,wie sie Dir gefällt.;-)
如果这整件事听起来很奇怪,请记住,电子邮件是一个有近50年历史的系统,多年来,它的安全性、附件和非ascii字符都被固定在一起,并一直关注向后兼容性。但是,如果你不能远程登录到其他电子邮件服务器,你就永远无法向任何人发送电子邮件。作为运行电子邮件服务器的人,你不能为整个世界创建帐户来接收每个人的电子邮件。
当您以编程方式执行此操作时,这取决于您使用的库。大多数库都会为标头设置默认值,并允许您根据需要覆盖标头。