29

发送电子邮件时,在 SMTP 对话期间通过 RCTP TO: 命令给出收件人列表。稍后,在 DATA 命令中,会指示诸如“To”、“Cc”、“bcc”之类的标头字段。此 RCPT TO 收件人列表是否必须与 DATA 命令中指示的标头匹配?

此外,如果收件人不在 RCPT TO 中,而是在电子邮件标头的 To 字段中,是否会发送给不在 RCPT TO 中的收件人?

4

3 回答 3

21

不,它们不必匹配。发送消息时,SMTP 服务器(又名消息传输代理或 MTA)正在创建一个所谓的 SMTP 信封,其中包含消息的收件人和发件人(请参阅RFC5321):

SMTP 传输一个邮件对象。一个邮件对象包含一个信封和内容。SMTP 信封作为一系列 SMTP 协议单元发送(在第 3 节中描述)。它由一个始发者地址(错误报告应发送到该地址)、一个或多个收件人地址和可选的协议扩展材料组成。

实际上,RCPT TO: 命令的收件人通常比消息的标头要多——一种常见的情况是使用“密件抄送”bcc:(参见RFC5321):

出于多种原因,未出现在邮件标题部分中的地址可能会出现在 SMTP 服务器的 RCPT 命令中。最常见的两个涉及使用邮寄地址作为“列表扩展器”(一个地址解析为多个地址)和“盲副本”的出现。

于 2012-06-15T15:21:57.127 回答
13

此 RCPT TO 收件人列表是否必须与 DATA 命令中指示的标头匹配?

没有。

如果收件人不在 RCPT TO 中,但在电子邮件标头的 To 字段中,是否会发送给不在 RCPT TO 中的收件人?

RCPT。这是我自己的 SMTP 客户端的(修改后的)成绩单,我按照您的要求进行操作:

CLIENT: MAIL FROM:<myaccount@gmail.com>
SERVER: 250 2.1.0 OK 
CLIENT: RCPT TO:<myaccount@gmail.com>
SERVER: 250 2.1.5 OK 
CLIENT: DATA
SERVER: 354  Go ahead 
CLIENT: Subject: Test email
CLIENT: From:'John Doe'<fakeaccount@gmail.com>
CLIENT: To:'John Doe'<fakeaccount@gmail.com>
CLIENT: This is a test...
CLIENT: .

消息已成功发送至“myaccount@gmail.com”。

于 2012-10-23T15:06:38.360 回答
5

SMTP 协议 ( RFC 2821 ) 声明如下:

当使用 RFC 822 格式 [7, 32] 时,邮件数据包括
备注标题项,例如日期、主题、收件人、抄送、发件人。服务器 SMTP
系统不应拒绝基于
RFC 822 或 MIME [12] 邮件头或邮件正文中的感知缺陷的邮件。

和这个:

DATA 命令只能在协议交换中的两个点失败:

  • 如果没有 MAIL,或者没有 RCPT,命令,或者所有这样的命令都被拒绝,服务器可以返回一个“命令乱序”(503)或“没有有效的接收者”(554)作为对 DATA 命令的响应。如果收到其中一个回复(或任何其他 5yz 回复),则客户端不得发送消息数据;更一般地说,除非收到 354 回复,否则不得发送消息数据。

从这些语句中,标题和 RCPT TO: 命令内容不必匹配(尽管它们应该匹配),并且不使用 RCPT TO: 可能会导致错误以阻止继续执行 DATA 命令。

于 2012-05-30T18:46:32.723 回答