发送电子邮件时,收件人列表在 SMTP 对话期间通过 RCTP TO: 命令给出。随后,在 DATA 命令中,指示“To”、“Cc”、“bcc”等标头字段。此 RCPT TO 收件人列表是否必须与 DATA 命令中指示的标头匹配?
另外,如果收件人没有在 RCPT TO 中标明,而是在电子邮件标头的“收件人”字段中标明,那么邮件是否会发送给 RCPT TO 中以外的收件人?
不,它们不必匹配。发送邮件时,SMTP 服务器(又名邮件传输代理或 MTA)将创建一个所谓的 SMTP 信封,其中包含邮件的收件人和发件人(请参阅RFC5321):
SMTP 传输邮件对象。邮件对象包含信封和内容。 SMTP信封作为一系列SMTP协议发送 单位(第 3 节中描述)。它由一个发起者组成 地址(错误报告应定向至该地址),一个或多个 收件人地址和可选协议扩展材料。
实际上,RCPT TO: 命令的接收者数量通常多于消息标头 - 一种常见情况是使用“密件抄送”bcc:(参见 RFC5321):
可能会出现未出现在邮件标题部分的地址 出于多种原因,在 RCPT 命令中将其发送到 SMTP 服务器。这 两个最常见的涉及使用邮寄地址作为“列表” 爆炸器”(解析为多个地址的单个地址)和 “盲抄”的出现。
此 RCPT TO 收件人列表是否必须与标头匹配 DATA 命令中指示?
不。
如果收件人未在 RCPT TO 中指定,而是在 RCPT TO 字段中指定 电子邮件标头,是否将发送给不在 RCPT 中的收件人 到?
RCPT。这是我自己的 SMTP 客户端的(修改后的)记录,我按照您的要求进行操作:
CLIENT: MAIL FROM:<[email protected]>
SERVER: 250 2.1.0 OK
CLIENT: RCPT TO:<[email protected]>
SERVER: 250 2.1.5 OK
CLIENT: DATA
SERVER: 354 Go ahead
CLIENT: Subject: Test email
CLIENT: From:'John Doe'<[email protected]>
CLIENT: To:'John Doe'<[email protected]>
CLIENT: This is a test...
CLIENT: .
消息已成功发送至“[电子邮件受保护]”。
SMTP 协议 (RFC 2821) 规定如下:
当使用 RFC 822 格式 [7, 32] 时,邮件数据包括
备忘录标题项,例如日期、主题、收件人、抄送、发件人。服务器 SMTP
系统不应基于感知到的缺陷而拒绝消息
RFC 822 或 MIME [12] 消息标头或消息正文。
还有这个:
DATA 命令只能在协议中的两个点失败 交换:
- 如果没有 MAIL,或没有 RCPT、命令或所有此类命令 被拒绝,服务器可能返回“命令乱序” (503) 或“无有效收件人”(554) 回复数据 命令。如果这些回复之一(或任何其他 5yz 回复)是 收到后,客户端不得发送消息数据;更多的 一般来说,除非收到 354 回复,否则不得发送消息数据 收到了。
从这些语句中,标题和 RCPT TO: 命令内容不必匹配(尽管它们应该匹配),并且不使用 RCPT TO: 可能会导致错误,从而阻止继续执行 DATA 命令。