SMTP POP3协议整理

更新时间:2023-11-30 15:22:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

邮件协议整理

写在前面

最开始的邮件传输是根据SMTP实现的,但由于历史原因,Internet上的很多网关不能正确传输8 bit内码的字符,比如汉字等。所以出现了对邮件内容编码的需要。这样,在邮件协议中除了smtp、pop外,又增加了与编码相关的MIME。

概括地说,smtp、pop与邮件的接收、发送过程相关,这两者负责邮件的传输;而MIME与邮件内容(这里,邮件内容包括发件人信息、收件人/抄送人信息、邮件正文、附件)相关,约定了被传输邮件的格式。可以这样理解,smtp、pop完成了邮差的工作,mime解决了信件(包括信封)格式的问题。没有mime之前,邮差只能给美国人送邮件;有了mime之后,邮差可以提供国际快递业务了。

1. Smtp

SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。

关于SMTP的详细介绍参考rfc821,http://tools.ietf.org/html/rfc821 Rfc2821, http://tools.ietf.org/html/rfc2821 验证过程

>:auth login ---进行用户身份认证

<:334 VXNlcm5hbWU6 ---BASE64编码“Username:”

>:Y29zdGFAYW1heGl0Lm5ldA== ----发送BASE64编码的用户名 <:334 UGFzc3dvcmQ6 ---BASE64编码\>:MTk4MjIxNA== ---客户端发送BASE64编码的密码 <:235 auth successfully ---成功

客户端命令: HELO/EHLO AUTH LOGIN MAIL FROM: RCPT TO: DATA

向服务器发出请求 用户身份认证 发件人信息,

收件人信息,告诉服务器邮件发送给谁, 可重复多次,发送给多个收件人 邮件内容 本次请求结束

QUIT 服务器返回值:

220 Service ready

221 Service closing transmission channel

250 Requested mail action okay, completed

354 Start mail input; end with . 其它参考【rfc821】、【rfc2821】

示例:

对data命令的应答

R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready S: HELO LBL-UNIX.ARPA R: 250 USC-ISI.ARPA

S: MAIL FROM: R: 250 OK

S: RCPT TO: R: OK

S: DATA

R: 354 Start mail input; end with . S: Blah blah blah... S: ...etc. etc. etc. S: . R: 250 OK

S: QUIT

R: 221 USC-ISI.ARPA Service closing transmission channel 【注意】 DATA命令之后,若邮件服务器返回354状态值表示开始接收数据;用户开始发送数据,邮件数据连续发送,并以.结束。因为后面采用对邮件内容采用了mime编码的原因,data数据中不会出现.字段与上面的结束符冲突。 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. pop

POP的全称是 Post Office Protocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口。

参考rfc1939,http://tools.ietf.org/html/rfc1939 常用命令

大部分邮件服务器使用明文的用户名、密码进行认证。 命令 参数 状态 描述

------------------------------------------

USER username 认证 此命令与下面的pass命令若成功,将导致状态转换 PASS password 认证

APOP Name,Digest 认证 Digest是MD5消息摘要

------------------------------------------ STAT None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节 数 UIDL [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯 LIST [Msg#] RETR [Msg#] DELE [Msg#] RSET None

TOP [Msg#] NOOP None

处理 处理 处理 处理

服务器将返回由参数标识的邮件前n行内容,n必须是正整数

服务器返回一个肯定的响应

处理 处理

一的

返回邮件数量和每个邮件的大小

返回由参数标识的邮件的全部文本

服务器将由参数标识的邮件标记为删除,由quit命令执行 服务器将重置所有标记为删除的邮件,用于撤消DELE命

------------------------------------------ QUIT None 更新

【注意】任何邮件的删除都必须在quit命令发出后对已标记为删除的邮件执行删除操作,若发生访问中断,没有发出quit命令,那么虽然执行过dele命令,邮件仍不会被删除。

在客户端发出RETR 305命令后,服务器立即返回数据,数据可分在几个包中连续发送。邮件内容用.结束。 如下: +OK 2281 octets

Received: from mail-pz0-f178.google.com ([209.85.222.178]) by oa.legendsec.com (Lotus Domino Release 6.5.3) with ESMTP id 2009063010503284-48548 ; Tue, 30 Jun 2009 10:50:32 +0800

Received: by pzk8 with SMTP id 8so621168pzk.28

for ; Mon, 29 Jun 2009 19:50:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; .............

MIME-Version: 1.0

Received: 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 +0800

Message-ID: <3627518b0906291950v104c242

邮件内容需要从返回的邮件数据中解析。

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

3. MIME

rfc文档中有MIME的详细说明。

3.1. 邮件mime格式

参考:

rfc4021,Registration of Mail and MIME Header Fields,

http://www.apps.ietf.org/rfc/rfc4021.html,

总体来说,MIME消息由消息头和消息体两大部分组成。这里,我们称为邮件头、邮件体。

3.1.1. 邮件头

邮件头包含了发件人、收件人、主题、时 间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第 一个空白字符不是信息本身固有的,解码时要过滤掉。

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

例如:

常见信息如下

Date: Mon, 29 Jun 2009 18:39:03 +0800

From: \To: \Cc: \

BCC: \HB?=\Subject: attach

Message-ID: <200906291839032504254@legendsec.com> X-mailer: Foxmail 6, 15, 201, 21 [cn] Mime-Version: 1.0

Date From: To: Cc: BCC:

日期 发件人信息 收件人信息 抄送人信息 密送人信息 主题

Subject:

X-mailer 客户端名称

非标准的、自定义域名都以X-开头,例如X-Mailer, X-MSMail-Priority等,通常在接收和发送邮件的是同一程序时才能理解它们的意义。

关于密送:有三种实现方式,

1. 在邮件服务器发送邮件前,将收件人、抄送人、密送人的邮件的Bcc行都删除。 2. 在邮件服务器发送邮件前,收件人、抄送人的邮件删除Bcc栏,只有密送人收到的邮件包含该字段。如果有多个密送人,可能在密送栏有所有密送人地址、或只有自己的地址

3. 邮件服务器拿到的邮件内容中根本不出现Bcc栏。

The \field (where the \means \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 \

In the first case, when a message containing a \line is removed even though all of the recipients (including those specified in the \sent a copy of the message.

In the second case, recipients specified in the \the message with the \recipients on the \ get a separate copy of the message containing a \line. (When there are multiple recipient addresses in the \to each recipient with a \

Finally, since a \field may contain no addresses, a \field can be sent without any addresses indicating to the recipients that blind copies were sent to someone. Which method to use with \ Considerations\ (来源:http://www.apps.ietf.org/rfc/rfc2822.html#sec-3.6.3)

3.1.2. 邮件体

在邮件体中,大致有如下一些域: 域名 含义

Content-Type 段体的类型

本文来源:https://www.bwwdw.com/article/csdt.html

Top