当前位置:文档之家› SMTP POP3协议整理

SMTP POP3协议整理

邮件协议整理写在前面最开始的邮件传输是根据SMTP实现的,但由于历史原因,Internet上的很多网关不能正确传输8 bit内码的字符,比如汉字等。

所以出现了对邮件内容编码的需要。

这样,在邮件协议中除了smtp、pop外,又增加了与编码相关的MIME。

概括地说,smtp、pop与邮件的接收、发送过程相关,这两者负责邮件的传输;而MIME 与邮件内容(这里,邮件内容包括发件人信息、收件人/抄送人信息、邮件正文、附件)相关,约定了被传输邮件的格式。

可以这样理解,smtp、pop完成了邮差的工作,mime解决了信件(包括信封)格式的问题。

没有mime之前,邮差只能给美国人送邮件;有了mime 之后,邮差可以提供国际快递业务了。

1.SmtpSMTP(Simple Mail Transfer Protocol):简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。

关于SMTP的详细介绍参考rfc821,/html/rfc821Rfc2821,/html/rfc2821验证过程>:auth login ---进行用户身份认证<:334 VXNlcm5hbWU6 ---BASE64编码“Username:”>:Y29zdGFAYW1heGl0Lm5ldA== ----发送BASE64编码的用户名<:334 UGFzc3dvcmQ6 ---BASE64编码"Password:">:MTk4MjIxNA== ---客户端发送BASE64编码的密码<:235 auth successfully ---成功客户端命令:HELO/EHLO 向服务器发出请求AUTH LOGIN 用户身份认证MAIL FROM: 发件人信息,RCPT TO: 收件人信息,告诉服务器邮件发送给谁,可重复多次,发送给多个收件人DA TA 邮件内容QUIT 本次请求结束服务器返回值:220 <domain> Service ready221 <domain> Service closing transmission channel250 Requested mail action okay, completed354 Start mail input; end with <CRLF>.<CRLF> 对data命令的应答其它参考【rfc821】、【rfc2821】示例:R: 220 USC-ISI.ARPA Simple Mail Transfer Service ReadyS: HELO LBL-UNIX.ARPAR: 250 USC-ISI.ARPAS: MAIL FROM:<mo@LBL-UNIX.ARPA>R: 250 OKS: RCPT TO:<Jones@USC-ISI.ARPA>R: OKS: DA TAR: 354 Start mail input; end with <CRLF>.<CRLF>S: Blah blah blah...S: ...etc. etc. etc.S: .R: 250 OKS: QUITR: 221 USC-ISI.ARPA Service closing transmission channel【注意】DA TA命令之后,若邮件服务器返回354状态值表示开始接收数据;用户开始发送数据,邮件数据连续发送,并以<CRLF>.<CRLF>结束。

因为后面采用对邮件内容采用了mime编码的原因,data数据中不会出现<CRLF>.<CRLF>字段与上面的结束符冲突。

The mail data may contain any of the 128 ASCII character codes, although experience has indicated that use of control characters other than SP, HT, CR, and LF may cause problems and SHOULD be avoided when possible.2.popPOP的全称是Post Office Protocol,即邮局协议,用于电子邮件的接收,它使用TCP 的110端口。

参考rfc1939,/html/rfc1939常用命令大部分邮件服务器使用明文的用户名、密码进行认证。

命令参数状态描述------------------------------------------USER username 认证此命令与下面的pass命令若成功,将导致状态转换PASS password 认证APOP Name,Digest 认证Digest是MD5消息摘要------------------------------------------STA T None 处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数UIDL [Msg#] 处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的LIST [Msg#] 处理返回邮件数量和每个邮件的大小RETR [Msg#] 处理返回由参数标识的邮件的全部文本DELE [Msg#] 处理服务器将由参数标识的邮件标记为删除,由quit命令执行RSET None 处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令TOP [Msg#] 处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数NOOP None 处理服务器返回一个肯定的响应------------------------------------------QUIT None 更新【注意】任何邮件的删除都必须在quit命令发出后对已标记为删除的邮件执行删除操作,若发生访问中断,没有发出quit命令,那么虽然执行过dele命令,邮件仍不会被删除。

在客户端发出RETR 305命令后,服务器立即返回数据,数据可分在几个包中连续发送。

邮件内容用<CRLF>.<CRLF>结束。

如下:+OK 2281 octetsReceived: from ([209.85.222.178])by (Lotus Domino Release 6.5.3)with ESMTP id 2009063010503284-48548 ;Tue, 30 Jun 2009 10:50:32 +0800Received: by pzk8 with SMTP id 8so621168pzk.28for <gaoxl@>; Mon, 29 Jun 2009 19:50:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;.............MIME-V ersion: 1.0Received: by 10.142.139.9 with SMTP id m9mr316739wfd.174.1246330221459; Mon,29 Jun 2009 19:50:21 -0700 (PDT)Date: Tue, 30 Jun 2009 10:50:21 +0800Message-ID: <3627518b0906291950v104c242邮件内容需要从返回的邮件数据中解析。

邮件格式与smtp发送邮件相同,在下面的mime节介绍。

3.MIMErfc文档中有MIME的详细说明。

3.1. 邮件mime格式参考:rfc4021,Registration of Mail and MIME Header Fields,/rfc/rfc4021.html,总体来说,MIME消息由消息头和消息体两大部分组成。

这里,我们称为邮件头、邮件体。

3.1.1. 邮件头邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。

每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。

域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的,解码时要过滤掉。

邮件头中不允许出现空行。

有一些邮件不能被邮件客户端软件识别,显示的是原始码,就是因为首行是空行。

例如:常见信息如下Date: Mon, 29 Jun 2009 18:39:03 +0800From: "=?gb2312?B?26zQocHB?=" <gaoxl@>To: "moreorless" <moreorless@>Cc: "gxl0620" <gxl0620@>BCC: "=?gb2312?B?26zQoc HB?=" <venus.oso@>Subject: attachMessage-ID: <200906291839032504254@>X-mailer: Foxmail 6, 15, 201, 21 [cn]Mime-V ersion: 1.0Date 日期From: 发件人信息To: 收件人信息Cc: 抄送人信息BCC: 密送人信息Subject: 主题X-mailer 客户端名称非标准的、自定义域名都以X-开头,例如X-Mailer, X-MSMail-Priority等,通常在接收和发送邮件的是同一程序时才能理解它们的意义。

关于密送:有三种实现方式,1.在邮件服务器发送邮件前,将收件人、抄送人、密送人的邮件的Bcc行都删除。

2.在邮件服务器发送邮件前,收件人、抄送人的邮件删除Bcc栏,只有密送人收到的邮件包含该字段。

如果有多个密送人,可能在密送栏有所有密送人地址、或只有自己的地址3.邮件服务器拿到的邮件内容中根本不出现Bcc栏。

The "Bcc:" field (where the "Bcc" means "Blind Carbon Copy") contains addresses of recipients of the message whose addresses are not to be revealed to other recipients of the message. There are three ways in which the "Bcc:" field is used.In the first case, when a message containing a "Bcc:" field is prepared to be sent, the "Bcc:" line is removed even though all of the recipients (including those specified in the "Bcc:" field) are sent a copy of the message.In the second case, recipients specified in the "To:" and "Cc:" lines each are sent a copy of the message with the "Bcc:" line removed as above, but the recipients on the "Bcc:" line get a separate copy of the message containing a "Bcc:" line. (When there are multiple recipient addresses in the "Bcc:" field, some implementations actually send a separate copy of the message to each recipient with a "Bcc:" containing only the address of that particular recipient.) Finally, since a "Bcc:" field may contain no addresses, a "Bcc:" field can be sent without any addresses indicating to the recipients that blind copies were sent to someone. Which method to use with "Bcc:" fields is implementation dependent, but refer to the "Security Considerations" section of this document for a discussion of each.(来源:/rfc/rfc2822.html#sec-3.6.3)3.1.2. 邮件体在邮件体中,大致有如下一些域:域名含义Content-Type 段体的类型Content-Transfer-Encoding 段体的传输编码方式Content-Disposition 段体的安排方式Content-ID 段体的IDContent-Location 段体的位置(路径)Content-Base 段体的基位置有的域除了值之外,还带有参数。

相关主题