发送电子邮件时,通过RCTP TO:命令在SMTP对话期间提供收件人列表。稍后,在DATA命令中,指示诸如“To”,“Cc”,“bcc”的标题字段。此RCPT TO收件人列表是否必须与DATA命令中指示的标头匹配?
此外,如果收件人未在RCPT TO中指示,但在电子邮件标题的“收件人”字段中,是否会将其发送给不在RCPT TO中的收件人?
答案 0 :(得分:16)
不,他们没有必要匹配。发送邮件时,SMTP服务器(也称为邮件传输代理或MTA)正在创建一个所谓的SMTP信封,其中包含邮件的收件人和发件人(请参阅RFC5321):
SMTP传输邮件对象。邮件对象包含信封和内容。 SMTP信封作为一系列SMTP协议发送 单位(见第3节)。它由一个发起者组成 地址(应向哪个错误报告),一个或多个 收件人地址和可选的协议扩展材料。
实际上,RCPT TO:Command通常有更多的收件人,邮件的标题 - 一个常见的情况是使用“盲目复制”bcc :(见RFC5321):
可能会出现未显示在邮件标题部分中的地址 在RCPT命令中,由于多种原因导致SMTP服务器。该 最常见的两个问题是使用邮寄地址作为“清单” exploder“(解析为多个地址的单个地址)和 “盲目复制”的出现。
答案 1 :(得分:8)
此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”。
答案 2 :(得分:5)
SMTP协议(RFC 2821)声明如下:
当使用RFC 822格式[7,32]时,邮件数据包括
备注标题项,例如Date,Subject,To,Cc,From。服务器SMTP
系统不应该根据中的感知缺陷拒绝消息 RFC 822或MIME [12]邮件头或邮件正文。
而且:
DATA命令只能在协议中的两个点失败 交换:
- 如果没有MAIL,或没有RCPT,命令或所有此类命令 被拒绝,服务器可能会返回“命令不按顺序” (503)或“无有效接收者”(554)回复数据 命令。如果其中一个回复(或任何其他5yz回复)是 收到后,客户端不得发送消息数据;更多 通常,除非354回复,否则不得发送消息数据 接收。
从这些语句中,标题和RCPT TO:命令内容不必匹配(尽管它们应该匹配),并且不使用RCPT TO:可能导致错误以防止继续使用DATA命令。