不要向收件人发送电子邮件

Posted

技术标签:

【中文标题】不要向收件人发送电子邮件【英文标题】:don't send email to to-recipient 【发布时间】:2021-07-19 07:51:25 【问题描述】:

问题:

是否可以向抄送/密送收件人看到的收件人发送电子邮件?

换句话说:是否可以通过抄送或密送但不能向收件人(即“收件人”标头字段中的收件人)发送电子邮件?

示例:

Andrew 希望 Bob 在不实际将其发送给 Alice 的情况下接收其中任何一封电子邮件:

from: Andrew
to: Alice

from: Andrew
to: Alice
cc: Bob

这可能吗?


我不太了解主题,但从我的阅读来看,发件人 (Andrew) 似乎必须为 toenvelope-to 字段使用不同的收件人,但我不知道如何实现.

发件人 (Andrew) 不可避免地 是否必须set up his own mail server 才能实现此目的,还是有更简单的解决方案?

【问题讨论】:

我投票结束这个问题,因为它似乎与生成用于网络钓鱼和其他不道德方法的虚假来源电子邮件有关 你误解了我的问题。我的问题不能用于网络钓鱼!网络钓鱼依赖于伪造发件人地址。我的问题根本不涉及伪造发件人地址(或任何其他地址)。 命名您使用的操作系统。 Windows 和 Linux。雷鸟是我的 MUA。谢谢。 ToFromCC 甚至 BCC 只是电子邮件中的标题。您可以输入任何您想要的内容,至少如果您使用一个可以控制电子邮件标题的库。对于***,最好包含您尝试过的代码,并说明您卡在哪里。当您运行代码时会发生什么,您期望会发生什么?你提到雷鸟。 *** 仅用于编程问题,不适用于一般软件使用。也就是说,如果您有 Th​​underbird 插件,那肯定是话题。同样,我们需要查看代码。另请参阅How to Ask。 【参考方案1】:

ToFromCC 甚至 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 个标头(FromToCCSubject),然后是分隔标头和电子邮件正文的空行,然后是正文,也就是那一行.

以一行上的单个点结束电子邮件:

.
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: 标头中添加与在 rcpt-to: 命令中使用的不同的电子邮件地址。

通常,MUA 将添加与 SMTP 信封地址匹配的 To:CC: 标头,但这不是必需的。但是,没有这些标头,或者标头与 SMTP 信封命令不匹配,可能会给您带来一些垃圾邮件点。

在许多情况下,您不需要用户名或密码。这是故意的。例如,您是 gmail 用户,并且想向 yahoo.com 上的某人发送一些内容。您将需要您的 gmail 用户名和密码才能登录到您的 gmail 帐户,但您不需要 yahoo.com 帐户来向拥有 yahoo.com 帐户的人发送电子邮件。如果您需要登录您可能想要发送到的每个电子邮件服务器,那么您必须拥有大量的用户名和密码!这是电子邮件的优势,它是开放的、免费的,每个人都可以运行服务器并收发电子邮件。

Du kannst Dir die Welt machen,wie sie Dir gefällt。 ;-)

如果这整个事情听起来很奇怪,请记住,电子邮件是一个近 50 年历史的系统,多年来一直在使用安全、附件和非 ascii 字符,并且一直关注向后兼容性。但是,如果您无法远程登录到其他电子邮件服务器,您将永远无法向任何人发送电子邮件。作为运行电子邮件服务器的人,您无法为全世界创建帐户以接收来自所有人的电子邮件。

当您以编程方式执行此操作时,这取决于您使用的库。大多数库都会为标头设置默认值,并让您根据需要覆盖标头。

【讨论】:

不,您不需要输入凭据。我已经更新了答案。试试看,然后通过 telnet 给自己发送一封电子邮件! 哇,多么完美的答案。我真的很敬畏!快速提问:我没有看到你提到它,但在某些时候我肯定必须输入我的凭据(电子邮件/密码),不是吗? 好的,我明白了!谢谢你,罗伯特,你的精彩回答帮助我更好地了解了这个世界!

以上是关于不要向收件人发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 MailMessage 向多个收件人发送电子邮件?

如何向 2 个收件人发送电子邮件并且两个收件人在收件人字段中看到对方?

向大量收件人发送电子邮件的最佳实践 (Rails + SendGrid)

如何向超过 15000 个收件人发送邮件?

使用 SKPSMTPMessage 向 2​​ 个收件人发送电子邮件

如何使用 python smtplib 向多个收件人发送电子邮件?