SMTP POP3协议整理.docx
- 文档编号:7954370
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:15
- 大小:167.60KB
SMTP POP3协议整理.docx
《SMTP POP3协议整理.docx》由会员分享,可在线阅读,更多相关《SMTP POP3协议整理.docx(15页珍藏版)》请在冰豆网上搜索。
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本次请求结束
服务器返回值:
220
221
250Requestedmailactionokay,completed
354Startmailinput;endwith
其它参考【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
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SMTP POP3协议整理 POP3 协议 整理