电子邮件应用编程要点课件_第1页
电子邮件应用编程要点课件_第2页
电子邮件应用编程要点课件_第3页
电子邮件应用编程要点课件_第4页
电子邮件应用编程要点课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年7月23日广州大学Java网络编程主讲:刘淼1电子邮件应用编程2023年7月23日广州大学Java网络编程主讲:刘淼2内容SMTP协议编程POP3协议编程学习目标

明确两种协议的内容命令响应代码掌握邮件协议的应用编程模式,并能灵活运用2023年7月23日广州大学Java网络编程主讲:刘淼3概述电子邮件应用编程模式遵循传统的客户/服务器模式不同之处在传统的通信过程中,通信的主体是软件进程,通信过程中要建立通信连接,通信的两端都正在运行。在电子邮件通信中,通信的主体是人,发信人和收信人不可能保证同时在线,收信人也不可能总是用同一台机器收发邮件。2023年7月23日广州大学Java网络编程主讲:刘淼4概述因此,必须借鉴传统的信件通信模式。延迟递交模式。因特网上电子邮件通信过程见讲义图12023年7月23日广州大学Java网络编程主讲:刘淼5电子邮件消息格式电子邮件消息格式采用文本字段定义电子邮件是供人阅读的由信封和电子邮件报文两部分构成电子邮件报文由报文头和消息主体构成报文头由一系列字段名称和相应取值构成消息主体就是实际发送的消息内容信封一般由MUA和MTA从报文头中抽取部分与传递邮件相关的字段内容构成电子邮件消息格式就是指电子邮件头字段名称、相应语义和编码格式2023年7月23日广州大学Java网络编程主讲:刘淼6电子邮件格式有RFC822格式和MIME(MultipurposeInternetMailExtensions)格式2023年7月23日广州大学Java网络编程主讲:刘淼7RFC822格式名称的由来1982年,IETF发布了RFC821和RFC822文档。RFC821文档定义了SMTP协议,RFC822文档规定了电子邮件的格式。2001年,IETF发布了RFC2821文档和RFC2822文档,分别更新了RFC821和RFC822文档。由于前后两个定义电子邮件格式的RFC文档的编号后3位数都是822,所以这种电子邮件格式名称就称为RFC822格式。2023年7月23日广州大学Java网络编程主讲:刘淼8RFC822格式RFC822格式规定电子邮件头和消息内容采用ASCII码编码方式,每行由回车(CR)和换行(LF)结尾,建议每行长度在80字符以内,最长不超过1000个字符,电子邮件头和消息内容用一个空行隔开。RFC822格式的头字段的名称及说明见下表2023年7月23日广州大学Java网络编程主讲:刘淼9字段名称说明Date必需。电子邮件的发送日期和时间。From必需。电子邮件作者的地址。Sender可选。发送电子邮件的地址。Reply-To可选。接收者的回复地址,缺省为From字段的值。To通常出现。接收者的邮件地址,可能有多个值。CC可选。抄送的邮件邮件地址,可能有多个值。Bcc可选。盲抄送的邮件邮件地址,可能有多个值。接收者和抄送者不知道电子邮件盲抄送的地址。Message-ID可选。电子邮件识别号,通常由MUA或MTA自动产生。In-Reply-To可选。当邮件为回复邮件时,该字段的值为被回复的邮件识别号。References可选。定义了与邮件相关的其它文档信息。Subject通常出现。邮件的主题信息。Comments可选。包含与该邮件相关的评论。Keywords可选。其值为逗号分隔的关键词,用于邮件查找。Resent*当重发邮件时必需。以Resent开头后接字段名,指重发时的相关字段信息。ReceivedReturn-Path由MTA自动插入,用来跟踪邮件经过的SMTP服务器。2023年7月23日广州大学Java网络编程主讲:刘淼10MIME格式为什么出现MIME格式?RFC822格式只能适用于纯英文形式的文本邮件当发送的信息或头字段的值包含有非英语文字,包含有图象、声音及可执行文件等其他文件形式时,怎么办?新的邮件格式是重新从零开始还是以RFC822格式为基础来定义新的格式呢?RFC822格式出现已经有很长时间了,许多邮件软件的开发都是以RFC822格式为基础,所以,新的格式最好采用ASCII来编码上述的非英语文字和多媒体等数据,这就是MIME,中文可读为多用途因特网邮件扩展。

2023年7月23日广州大学Java网络编程主讲:刘淼11考虑到邮件的内容不会被MTA读取,只会由接收方的MUA读取。所以,可以在邮件内容中以ASCII方式来编码非英语文字及其他非文本信息,增加邮件头字段信息描述编码方式及包含的信息类型等信息。因此MIME格式增加了新的邮件头字段定义和编码方式的定义。2023年7月23日广州大学Java网络编程主讲:刘淼12编码方式

Base64编码:

BASE64编码是使用最广的邮件编码格式,几乎所有的电子邮件软件头把它作为默认的二进制编码。

将二进制流以

24位为一组,每组分为4个6个二进位,每6个二进制位用ASCII码表示,这样,就把3个字节的信息表示为4个ASCII字符。若最后一组最后剩下的二进制位数不够6位,则在右边补0使之成6位;若最后一组不够4个ASCII字符时,用“=”填充,使之成4个ASCII字符。Base64采用65个ASCII字符来表示所有的数据。

2023年7月23日广州大学Java网络编程主讲:刘淼13编码方式

对二进制流100100110010010001001100001000101000010进行Base64编码,首先划分为2组,第1组24位:100100,110010,010001,001100;第2组13位:001010,00010,最后只有5位,最右边补上一位0,使之成6位。第1组的Base64编码为:KYRM,第2组的Base64编码为KE==。

2023年7月23日广州大学Java网络编程主讲:刘淼14编码方式

引用可打印(Quoted-Printable)编码:简称QP,

一般用于邮件内容大量是ASCII码字符,只含有少量非ASCII字符的情况。

QP编码规则:按字节编码。如果该字节最高位为0,则按ASCII码编码;如果最高位为1,则按3个ASCII字符编码,第1个字符为“=”,第2个字符是该字节高4位对应的十六进制数,第3个字符是该字节高4位对应的十六进制数;空格作为“=20”编码。

2023年7月23日广州大学Java网络编程主讲:刘淼15编码方式

7bit数据编码:就是RFC822格式的ASCII编码方式。

8bit数据编码:这是8位编码,非ASCII字符可以发送,必须由MTA和MUA提供支持。一般不推荐使用这种编码方式。

2023年7月23日广州大学Java网络编程主讲:刘淼16MIME扩展头字段

1、

MIME版本字段名:MIME-Version。这是唯一一个不以Content开头的字段,定义了MIME的使用版本,当前版本1.1。2、

内容-类型字段名:Content-Type。定义了邮件内容所包含的数据类型和子类型,根据子类型的不同,还可包含一些参数,具体格式为:Content-Type:<type>/<subtype>[;parameter1;parameter2..;parameterN]2023年7月23日广州大学Java网络编程主讲:刘淼17类型名子类型名说明textplain无格式文本,与RFC822格式一致。enriched包含格式信息的文本。html网页文件。imagejpeg内容为jpeg类型的图片。gif内容为gif类型的图片。tiff内容为tiff类型的图片。audiobasic内容为基本类型的音频文件。mpeg内容为mpeg的音频文件。videompeg内容为mpeg的视频文件。dv符合流行的VCR标准的视频文件。applicationoctet-stream任意二进制数据。msword微软word文档。pdfAdobepdf文档。zip压缩文档。multipart(多个正文部分)mixed各正文部分相互无联系,可顺序处理。alternative各正文部分有相同语义,但格式不同,可任取一个处理。parallel各正文部分可并行处理。encrypted第一部分包含加密的相关信息,第二部分包含加密数据。2023年7月23日广州大学Java网络编程主讲:刘淼183、

内容—传送—编码字段名:Content-Transfer-Encoding:包含内容的编码类型,具体编码类型见上一小节。4、

内容—标识字段名:Content-ID:邮件的唯一标识。5、

内容—描述字段名:Content-Description:对邮件内容的描述信息,一般用ASCII码文本。

2023年7月23日广州大学Java网络编程主讲:刘淼19如果在电子邮件头中包含非ASCII码字符,又如何处理呢?

头字段名称:=?<字符集>?<编码方式>?<编码后的字符>?=字符集:指编码前的文本采用的字符集名称。编码方式:有2种取值,“B”指Base64编码方式,“Q”指引用可打印编码方式。编码后的字符:指非ASCII字符集合经过编码后的ASCII字符集合。

2023年7月23日广州大学Java网络编程主讲:刘淼20SMTP协议

电子邮件从发送方的客户软件发送,经过发送方电子邮件帐号所在的邮件服务器,到达接收方邮件帐号所在的邮件服务器,整个传送过程都要使用SMTP协议。SMTP协议使用TCP协议提供的服务,它的周知端口号为25,RFC2821文档包含SMTP协议的最新定义。

SMTP首先由发件方提出申请,要求与接收方SMTP建立双向的通信渠道,收件方可以是最终收件人也可以是中间转发的服务器。收件方服务器确认可以建立连接后,双发就可以开始通信。2023年7月23日广州大学Java网络编程主讲:刘淼21SMTP协议通信过程

见讲义上的图2023年7月23日广州大学Java网络编程主讲:刘淼22常用命令和常见应答码

命令使用形式说明HELO域名

通知发送方的域名。MAILFROM:回邮地址通知回邮地址。RCPTTO:接收地址通知接收地址。DATA准备发送邮件。RSET放弃此次邮件发送。VERY邮件地址请求检查参数中的地址的有效性。EXPN邮件地址请求确认参数中的地址为邮件列表地址,返回列表中的邮件地址。HELP获取帮助信息。NOOP除了检查与服务器端的连接外,不做任何工作。QUIT终止会话。2023年7月23日广州大学Java网络编程主讲:刘淼23应答码应答信息说明220<servername>Serviceready.接受TCP连接请求。221<servername>closingtransmissionchannel.QUIT命令的应答,关闭传输通道。250Requestedmailactionokay,completed命令处理成功。354Startmailinput;endwith<CRLF>.<CRLF>DATA命令的应答,通知客户端已做好邮件接收准备工作。452Requestedactionnottaken:insufficientsystemstorage.由于服务器端外部存储空间不够,不能处理命令。500Syntaxerror,commandunrecognized语法错误,无法识别的命令。2023年7月23日广州大学Java网络编程主讲:刘淼24SMTP客户软件举例Mail.javaSMTPClientDemo.javaSMTP服务器软件举例Receiver.java2023年7月23日广州大学Java网络编程主讲:刘淼25POP3协议编程POP协议全称PostOfficeProtocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口进行通信。现在使用的是第三版,简称为POP3。2023年7月23日广州大学Java网络编程主讲:刘淼26POP3协议的通信过程POP3协议的通信基于传统的客户/服务器模式。POP3客户向POP3服务器请求建立TCP连接,服务器接受连接请求,建立连接,此时,POP3会话开始。POP3客户向服务器发送命令,服务器处理命令,向客户返回应答信息和处理结果。应答信息没有像SMTP协议那样有应答码,POP3应答信息以+OK或-ERR开头,后面跟描述信息。+OK是肯定应答,表示命令成功执行;-ERR是否定应答,表示在命令执行过程中出现错误。2023年7月23日广州大学Java网络编程主讲:刘淼27POP3会话状态转换图见讲义图3授权状态当POP3客户与服务器建立TCP连接后,服务器会发送肯定应答信息,进入授权状态,开始用户身份鉴别。客户端使用USER命令发送用户帐号名称,服务器端检查通过,传回肯定应答;接着,客户端使用PASS命令发送帐号密码,服务器端检

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论