SMTP POP3协议整理.docx

上传人:b****6 文档编号:7954370 上传时间:2023-01-27 格式:DOCX 页数:15 大小:167.60KB
下载 相关 举报
SMTP POP3协议整理.docx_第1页
第1页 / 共15页
SMTP POP3协议整理.docx_第2页
第2页 / 共15页
SMTP POP3协议整理.docx_第3页
第3页 / 共15页
SMTP POP3协议整理.docx_第4页
第4页 / 共15页
SMTP POP3协议整理.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

SMTP POP3协议整理.docx

《SMTP POP3协议整理.docx》由会员分享,可在线阅读,更多相关《SMTP POP3协议整理.docx(15页珍藏版)》请在冰豆网上搜索。

SMTP POP3协议整理.docx

SMTPPOP3协议整理

邮件协议整理

写在前面

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

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

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

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

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

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

1.Smtp

SMTP(SimpleMailTransferProtocol):

简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

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

关于SMTP的详细介绍参考rfc821,http:

//tools.ietf.org/html/rfc821

Rfc2821,http:

//tools.ietf.org/html/rfc2821

验证过程

>:

authlogin---进行用户身份认证

<:

334VXNlcm5hbWU6---BASE64编码“Username:

>:

Y29zdGFAYW1heGl0Lm5ldA==----发送BASE64编码的用户名

<:

334UGFzc3dvcmQ6---BASE64编码"Password:

"

>:

MTk4MjIxNA==---客户端发送BASE64编码的密码

<:

235authsuccessfully---成功

客户端命令:

HELO/EHLO向服务器发出请求

AUTHLOGIN用户身份认证

MAILFROM:

发件人信息,

RCPTTO:

收件人信息,告诉服务器邮件发送给谁,

可重复多次,发送给多个收件人

DATA邮件内容

QUIT本次请求结束

服务器返回值:

220Serviceready

221Serviceclosingtransmissionchannel

250Requestedmailactionokay,completed

354Startmailinput;endwith.对data命令的应答

其它参考【rfc821】、【rfc2821】

示例:

R:

220USC-ISI.ARPASimpleMailTransferServiceReady

S:

HELOLBL-UNIX.ARPA

R:

250USC-ISI.ARPA

S:

MAILFROM:

R:

250OK

S:

RCPTTO:

R:

OK

S:

DATA

R:

354Startmailinput;endwith.

S:

Blahblahblah...

S:

...etc.etc.etc.

S:

.

R:

250OK

S:

QUIT

R:

221USC-ISI.ARPAServiceclosingtransmissionchannel

【注意】DATA命令之后,若邮件服务器返回354状态值表示开始接收数据;用户开始发送数据,邮件数据连续发送,并以.结束。

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

Themaildatamaycontainanyofthe128ASCIIcharactercodes,althoughexperiencehasindicatedthatuseofcontrolcharactersotherthanSP,HT,CR,andLFmaycauseproblemsandSHOULDbeavoidedwhenpossible.

2.pop

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

参考rfc1939,http:

//tools.ietf.org/html/rfc1939

常用命令

大部分邮件服务器使用明文的用户名、密码进行认证。

命令参数状态描述

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

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

PASSpassword认证

APOPName,Digest认证Digest是MD5消息摘要

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

STATNone处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

UIDL[Msg#]处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

LIST[Msg#]处理返回邮件数量和每个邮件的大小

RETR[Msg#]处理返回由参数标识的邮件的全部文本

DELE[Msg#]处理服务器将由参数标识的邮件标记为删除,由quit命令执行

RSETNone处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令

TOP[Msg#]处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数

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

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

QUITNone更新

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

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

邮件内容用.结束。

如下:

+OK2281octets

Received:

frommail-pz0-([209.85.222.178])

by(LotusDominoRelease6.5.3)

withESMTPid2009063010503284-48548;

Tue,30Jun200910:

50:

32+0800

Received:

bypzk8withSMTPid8so621168pzk.28

for;Mon,29Jun200919:

50:

21-0700(PDT)

DKIM-Signature:

v=1;a=rsa-sha256;c=relaxed/relaxed;

.............

MIME-Version:

1.0

Received:

by10.142.139.9withSMTPidm9mr316739wfd.174.1246330221459;Mon,

29Jun200919:

50:

21-0700(PDT)

Date:

Tue,30Jun200910:

50:

21+0800

Message-ID:

<3627518b0906291950v104c242

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

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

3.MIME

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

3.1.邮件mime格式

参考:

rfc4021,RegistrationofMailandMIMEHeaderFields,

http:

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

总体来说,MIME消息由消息头和消息体两大部分组成。

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

3.1.1.邮件头

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

每条信息称为一个域,由域名后加“:

”和信息内容构成,可以是一行,较长的也可以占用多行。

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

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

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

例如:

 

常见信息如下

Date:

Mon,29Jun200918:

39:

03+0800

From:

"=?

gb2312?

B?

26zQocHB?

="

To:

"moreorless"

Cc:

"gxl0620"

BCC:

"=?

gb2312?

B?

26zQocHB?

="

Subject:

attach

Message-ID:

<200906291839032504254@>

X-mailer:

Foxmail6,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"Bcc:

"field(wherethe"Bcc"means"BlindCarbonCopy")containsaddressesofrecipientsofthemessagewhoseaddressesarenottoberevealedtootherrecipientsofthemessage.Therearethreewaysinwhichthe"Bcc:

"fieldisused.

Inthefirstcase,whenamessagecontaininga"Bcc:

"fieldispreparedtobesent,the"Bcc:

"lineisremovedeventhoughalloftherecipients(includingthosespecifiedinthe"Bcc:

"field)aresentacopyofthemessage.

Inthesecondcase,recipientsspecifiedinthe"To:

"and"Cc:

"lineseacharesentacopyofthemessagewiththe"Bcc:

"lineremovedasabove,buttherecipientsonthe"Bcc:

"linegetaseparatecopyofthemessagecontaininga"Bcc:

"line.(Whentherearemultiplerecipientaddressesinthe"Bcc:

"field,someimplementationsactuallysendaseparatecopyofthemessagetoeachrecipientwitha"Bcc:

"containingonlytheaddressofthatparticularrecipient.)

Finally,sincea"Bcc:

"fieldmaycontainnoaddresses,a"Bcc:

"fieldcanbesentwithoutanyaddressesindicatingtotherecipientsthatblindcopiesweresenttosomeone.Whichmethodtousewith"Bcc:

"fieldsisimplementationdependent,butrefertothe"Security

Considerations"sectionofthisdocumentforadiscussionofeach.

(来源:

http:

//www.apps.ietf.org/rfc/rfc2822.html#sec-3.6.3)

3.1.2.邮件体

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

域名含义

Content-Type段体的类型

Content-Transfer-Encoding段体的传输编码方式

Content-Disposition段体的安排方式

Content-ID段体的ID

Content-Location段体的位置(路径)

Content-Base段体的基位置

有的域除了值之外,还带有参数。

值与参数、参数与参数之间以“;”分隔。

参数名与参数值之间以“=”分隔。

邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。

常见的简单类型有text/plain(纯文本)和text/html(超文本)。

multipart类型,是MIME邮件的精髓。

邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。

常见的multipart类型有三种:

multipart/mixed,multipart/related和multipart/alternative。

从它们的名称,不难推知这些类型各自的含义和用处。

它们之间的层次关系可归纳为下图所示:

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。

邮件正文

Content-Type:

text/plain;

charset="gb2312"

Content-Transfer-Encoding:

base64

DQoNCjIwMDktMDctMDEgDQoNCg0KDQrbrNChwcEgDQo=

上面的邮件正文使用gb2312字符集、base64编码

附件处理

.multipart/mixed:

表示文档的多个部分是混合的,指正文与附件的关系。

如果邮件的MIME类型是multipart/mixed,即表示邮件带有附件。

Content-DispositionIntendedcontentdispositionandfilename

IndicateswhetheraMIMEbodypartistobeshowninlineorisanattachment;canalsoindicateasuggestedfilenameforusewhensavinganattachmenttoafile.

例:

1.附件名:

readme.txt

Content-Transfer-Encoding:

base64

Content-Disposition:

attachment;

filename="readme.txt"

2.附件名:

邮件内容

Content-Transfer-Encoding:

base64

Content-Disposition:

attachment;

filename="=?

gb2312?

B?

08q8/sTayN0udHh0?

="

filename后是编码后的附件内容。

3.2.MIME编码

参考rfc2047,MIMEPartThree:

MessageHeaderExtensionsforNon-ASCIIText

http:

//tools.ietf.org/html/rfc2047

MIME编码的两种方法:

对邮件进行编码最初的原因是因为Internet上的很多网关不能正确传输8bit内码的字符,比如汉字等。

编码的原理就是把8bit的内容转换成7bit的形式以能正确传输,在接收方收到之后,再将其还原成8bit的内容。

MIME是“多用途网际邮件扩充协议”的缩写,在MIME协议之前,邮件的编码曾经有过UUENCODE等编码方式,但是由于MIME协议算法简单,并且易于扩展,现在已经成为邮件编码方式的主流,不仅是用来传输8bit的字符,也可以用来传送二进制的文件,如邮件附件中的图像、音频等信息,而且扩展了很多基于MIME的应用。

从编码方式来说,MIME定义了两种编码方法Base64与QP(Quote-Printable):

3.1.1.Base64

Base64是一种通用的方法,其原理很简单,就是把三个Byte的数据用4个Byte表示,这样,这四个Byte中,实际用到的都只有前面6bit,这样就不存在只能传输7bit的字符的问题了。

Base64的缩写一般是“B”。

Base64将输入的字符串或一段数据编码成只含有{'A'-'Z','a'-'z','0'-'9','+','/'}这64个字符的串,'='用于填充。

其编码的方法是,将输入数据流每次取6bit,用此6bit的值(0-63)作为索引去查表,输出相应字符。

这样,每3个字节将编码为4个字符(3×8→4×6);不满4个字符的以'='填充。

Base64的算法很简单,它将字符流顺序放入一个24位的缓冲区,缺字符的地方补零。

然后将缓冲区截断成为4个部分,高位在先,每个部分6位,用64个字符重新表示。

如果输入只有一个或两个字节,那么输出将用等号“=”补足。

这可以隔断附加的信息造成编码的混乱。

3.2.2QP

另一种方法是QP(Quote-Printable)方法,通常缩写为“Q”方法,其原理是把一个8bit的字符用两个16进制数值表示,然后在前面加“=”。

所以我们看到经过QP编码后的文件通常是这个样子:

=B3=C2=BF=A1=C7=E5=A3=AC=C4=FA=BA=C3=A3=A1。

QP编码要求编码后每行不能超过76个字符。

当超过这个限制时,将使用软换行,用”=”表示编码行的断行,后接CRLF。

(76的限制包括”=”)。

“=”等号被编码为”=3D”。

tab和空格出现在行尾时,需要被编码为”=09”(tab)“=20”(space)

Any8-bitbytevaluemaybeencodedwith3characters,an"="followedbytwohexadecimaldigits(0–9orA–F)representingthebyte'snumericvalue.Forexample,aUS-ASCIIformfeedcharacter(decimalvalue12)canberepresentedby"=0C",andaUS-ASCIIequalsign(decimalvalue61)isrepresentedby"=3D".AllcharactersexceptprintableASCIIcharactersorendoflinecharactersmustbeencodedinthisfashion.

AllprintableASCIIcharacters(decimalvaluesbetween33and126)mayberepresentedbythemselves,except"="(decimal61).

ASCIItabandspacecharacters,decimalvalues9and32,mayberepresentedbythemselves,exceptifthesecharactersappearattheendofaline.Ifoneofthesecharactersappearsattheendofalineitmustbeencodedas"=09"(tab)or"=20"(space).

Ifthedatabeingencodedcontainsmeaningfullinebreaks,theymustbeencodedasanASCIICRLFsequence,notastheiroriginalbytevalues.Converselyifbytevalues10and13havemeaningsotherthanendoflinethentheymustbeencodedas=0Aand=0D.

Linesofquoted-printableencodeddatamustnotbelongerthan76characters.Tosatisfythisrequirementwithoutalteringtheencodedtext,softlinebreaksmaybeaddedasdesired.Asoftlinebreakconsistsofan"="attheendofanencodedline,anddoesnotcausealinebreakinthedecodedtext.

编码格式:

encoded-word="=?

"charset"?

"encoding"?

"encoded-text"?

="

编码信息有"=?

"和"?

="括起来,"=?

"后是字符集名称,再一个"?

"后是编码方式,再一个"?

"后是编码后的字符串。

字符集和编码方式都不区分大小写。

字符集可以是任意系统支持的字符集(iso-8859-1、utf-8、gb2312、gbk

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1