在SMTP中,RCPT TO:和TO:必须匹配吗?

时间:2012-05-30 18:34:41

标签: email smtp protocols

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

此外,如果收件人未在RCPT TO中指示,但在电子邮件标题的“收件人”字段中,是否会将其发送给不在RCPT TO中的收件人?

3 个答案:

答案 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命令。