不要向 to-recipient 发送电子邮件
don't send email to to-recipient
问题:
是否可以不向CC/BCC-recipients看到的to-recipient发送电子邮件?
换句话说:是否可以通过抄送或密件抄送但不能向to-recipient(即'to'中的收件人)发送电子邮件header 字段) ?
示例:
Andrew 希望 Bob 收到其中一封电子邮件而不实际发送给 Alice:
from: Andrew
to: Alice
或
from: Andrew
to: Alice
cc: Bob
这可能吗?
我不太了解主题,但从我的阅读来看,发件人 (Andrew) 似乎必须为 to
和 envelope-to
字段使用不同的收件人,但我没有知道如何实现。
发件人 (Andrew) 不可避免地 必须 set up his own mail server 才能实现此目的还是有更简单的解决方案?
To
、From
、CC
甚至 BCC
都只是电子邮件中的 header。您可以输入任何您想要的内容,至少如果您使用的库可以让您控制电子邮件中的 header。
让我们做一个非常简单的例子,使用 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 信封发件人电子邮件地址 。如果服务器接受电子邮件,它会再次回复以 200 秒代码开头的内容。
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
接下来是服务器用 354 代码确认的 data
命令,告诉您输入消息:
data
354 Go ahead v9si1145647ooe.55 - gsmtp
邮件由header组成,然后是空行,然后是邮件的body。下面的示例非常简单,但应该可以工作。您指定 From:
header、To:
,可能是 CC:
或 BCC:
(原文如此!)header,当然还有 Subject:
、Date:
和其他人。
From: me
To: you
CC: me again
Subject: test
Hello, this is a test.
这里你看到 4 个 header(From
、To
、CC
和 Subject
),后面是分隔 headers 和电子邮件 body,然后是 body,就是那一行。
在一行中以一个点结束电子邮件:
.
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 信封 收件人电子邮件地址。这是最重要的,这是电子邮件实际发送的地方。没有什么能阻止您将人员添加到 CC:
或 BCC:
行,而无需为他们指定 rcpt-to:
。他们不会收到电子邮件,但它会查看实际收到电子邮件的收件人,这些人也应该收到它。没有什么能阻止您在 To:
header 中添加与您在 rcpt-to:
命令中使用的不同的电子邮件地址。
通常,MUA 会添加与 SMTP 信封地址匹配的 To:
或 CC:
header,但这不是必需的。但是,没有其中一些 header,或者 header 与 SMTP 信封命令不匹配,可能会给您带来一些垃圾邮件点。
在许多情况下,您不需要用户名或密码。这是故意的。例如,您是 gmail 用户,想给 yahoo.com 上的某人发送邮件。您将需要您的 gmail 用户名和密码来登录您的 gmail 帐户,但您不需要 yahoo.com 的帐户即可向拥有 yahoo.com 帐户的人发送电子邮件。如果您需要登录您可能想要发送到的每个电子邮件服务器,您将不得不拥有大量的用户名和密码!这是email的优点,它是开放的,它是免费的,每个body都可以运行一台服务器收发邮件。[=46=]
Du kannst Dir die Welt machen,即 Dir gefällt。 ;-)
如果这整件事听起来很奇怪,请记住,电子邮件是一个已有近 50 年历史的系统,多年来一直在安全、附件和 non-ascii 字符上加固,并始终关注倒退问题兼容性。但是,如果您无法远程登录到其他电子邮件服务器,您将永远无法向任何 body 发送电子邮件。作为电子邮件服务器的人 运行,您无法为全世界创建帐户以接收来自每个body.
的电子邮件
当您以编程方式执行此操作时,这取决于您使用的库。大多数库将为 header 设置默认值,并让您根据需要覆盖 header。
问题:
是否可以不向CC/BCC-recipients看到的to-recipient发送电子邮件?
换句话说:是否可以通过抄送或密件抄送但不能向to-recipient(即'to'中的收件人)发送电子邮件header 字段) ?
示例:
Andrew 希望 Bob 收到其中一封电子邮件而不实际发送给 Alice:
from: Andrew
to: Alice
或
from: Andrew
to: Alice
cc: Bob
这可能吗?
我不太了解主题,但从我的阅读来看,发件人 (Andrew) 似乎必须为 to
和 envelope-to
字段使用不同的收件人,但我没有知道如何实现。
发件人 (Andrew) 不可避免地 必须 set up his own mail server 才能实现此目的还是有更简单的解决方案?
To
、From
、CC
甚至 BCC
都只是电子邮件中的 header。您可以输入任何您想要的内容,至少如果您使用的库可以让您控制电子邮件中的 header。
让我们做一个非常简单的例子,使用 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 信封发件人电子邮件地址 。如果服务器接受电子邮件,它会再次回复以 200 秒代码开头的内容。
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
接下来是服务器用 354 代码确认的 data
命令,告诉您输入消息:
data
354 Go ahead v9si1145647ooe.55 - gsmtp
邮件由header组成,然后是空行,然后是邮件的body。下面的示例非常简单,但应该可以工作。您指定 From:
header、To:
,可能是 CC:
或 BCC:
(原文如此!)header,当然还有 Subject:
、Date:
和其他人。
From: me
To: you
CC: me again
Subject: test
Hello, this is a test.
这里你看到 4 个 header(From
、To
、CC
和 Subject
),后面是分隔 headers 和电子邮件 body,然后是 body,就是那一行。
在一行中以一个点结束电子邮件:
.
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 信封 收件人电子邮件地址。这是最重要的,这是电子邮件实际发送的地方。没有什么能阻止您将人员添加到 CC:
或 BCC:
行,而无需为他们指定 rcpt-to:
。他们不会收到电子邮件,但它会查看实际收到电子邮件的收件人,这些人也应该收到它。没有什么能阻止您在 To:
header 中添加与您在 rcpt-to:
命令中使用的不同的电子邮件地址。
通常,MUA 会添加与 SMTP 信封地址匹配的 To:
或 CC:
header,但这不是必需的。但是,没有其中一些 header,或者 header 与 SMTP 信封命令不匹配,可能会给您带来一些垃圾邮件点。
在许多情况下,您不需要用户名或密码。这是故意的。例如,您是 gmail 用户,想给 yahoo.com 上的某人发送邮件。您将需要您的 gmail 用户名和密码来登录您的 gmail 帐户,但您不需要 yahoo.com 的帐户即可向拥有 yahoo.com 帐户的人发送电子邮件。如果您需要登录您可能想要发送到的每个电子邮件服务器,您将不得不拥有大量的用户名和密码!这是email的优点,它是开放的,它是免费的,每个body都可以运行一台服务器收发邮件。[=46=]
Du kannst Dir die Welt machen,即 Dir gefällt。 ;-)
如果这整件事听起来很奇怪,请记住,电子邮件是一个已有近 50 年历史的系统,多年来一直在安全、附件和 non-ascii 字符上加固,并始终关注倒退问题兼容性。但是,如果您无法远程登录到其他电子邮件服务器,您将永远无法向任何 body 发送电子邮件。作为电子邮件服务器的人 运行,您无法为全世界创建帐户以接收来自每个body.
的电子邮件当您以编程方式执行此操作时,这取决于您使用的库。大多数库将为 header 设置默认值,并让您根据需要覆盖 header。