资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,北京传智播客教育,*,高级软件人才实作培训专家,!,Java,邮件开发详解,讲师:,张孝祥,北京传智播客教育,配套书籍,北京传智播客教育,Java,邮件开发介绍,课程目标,为什么要学习和如何学习邮件开发,电子邮件的一些基本常识,准备实验环境,SMTP,协议与,POP3,协议,什么是,Java Mail,编写邮件发送程序,邮件内容的组织结构与邮件内容创建程序,邮件接收程序的简要介绍,北京传智播客教育,课程目标,用程序代码生成一封带附件和内嵌图片的复杂邮件(效果演示),用自己的程序代码将复杂邮件发送出去(效果演示),一些特殊的经验和高级应用,中文名的邮件附件的乱码问题,Tomcat,中,JavaMail,支持与冲突问题,SMTP,邮件服务器程序的开发,北京传智播客教育,为什么要学习邮件开发,曾经很赚钱的技术:,丁磊早期就是靠邮件起家,参看收集的网络资料,我本人对外承接的第一个项目也是邮件系统,对找工作有帮助:,我们好几个学员毕业后出去都在做邮件相关的项目,其中一个有意义的项目是将邮件内容发布成,BBS,的帖子。,许多办公自动化项目(,OA,)中都要附带发送邮件的功能,譬如我们要给学员发送通知,使用,OutLook,等手工方式就不合适,需要提高工作效率,让工作能够自动化,这也算是 信息化建设的一部分吧!,在许多网站项目中也都需要附带发送邮件的功能,即要求软件开发人员在,WEB,应用中编写相应的邮件处理程序。,给新注册的用户自动发送一封包含其注册信息的欢迎,E-Mail,给过生日的注册会员自动发送一封表示祝贺的,E-Mail,将网站的最新活动信息通过,E-Mail,发送给所有的注册会员,北京传智播客教育,如何学习邮件开发,学习邮件开发包括两大方面:,发送与接收邮件,创建与解析邮件内容,北京传智播客教育,电子邮件的一些基本常识,邮件服务器,电子邮箱,邮件客户端软件,邮件传输协议,电子邮件的传输过程,北京传智播客教育,邮件服务器,电子邮件服务器主要提供以下功能:,(,1,)接收用户投递的邮件;,(,2,)将用户投递进来的邮件转发给目标邮件服务器;,(,3,)接收其他邮件服务器转发来的邮件并把邮件存储到其管理的用户邮中;,(,4,)为前来读取邮件的用户提供读取服务。,邮件服务器按通讯协议可以划分为两种类型:,SMTP,服务器,POP3/IMAP,服务器,北京传智播客教育,电子邮箱与邮件客户端软件,电子邮箱:,每个电子邮件服务器之上都可以开设多个电子邮箱,电子邮箱也称之为,E-mail,地址,它类似现实生活中的通讯地址,用户可通过这个地址接收别人发来的电子邮件和向别人发送电子邮件。电子邮箱的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。邮件服务器把接收到的邮件保存到为某个帐户所分配的邮箱空间中,用户通过其申请的用户名和密码登陆到邮件服务器上查收该地址已收到的电子邮件。,邮件客户端软件:,邮件客户端软件负责与邮件服务器通讯,主要用于帮助用户将邮件发送给,SMTP,服务器和从,POP3/IMAP,邮件服务器读取用户的电子邮件。邮件客户端软件通常集邮件撰写、发送和接收功能于一体。,北京传智播客教育,电子邮件的传输过程,北京传智播客教育,准备实验环境,提前在,sina,和,sohu,上开设一个免费帐号,获取,smtp,和,pop3,服务器的名称,在,outlook,中配置,sina,帐户,使用,outlook,发送和接收邮件,北京传智播客教育,sina,Itcast_,sohu,Itcast_,smtp,smtp,pop3,北京传智播客教育,邮件传输协议,SMTP,协议,全称为,Simple Mail Transfer Protocol,(简单邮件传输协议),它定义了邮件客户端软件与,SMTP,服务器之间、以及两台,SMTP,服务器之间的通讯规则。,POP3,协议,全称为,Post Office Protocol,(邮局协议),它定义了邮件客户端软件与,POP3,服务器的通讯规则。,IMAP,协议,全称为,Internet Message Access,Protocal,(,Internet,消息访问协议),它是对,POP3,协议的一种扩展,定义了邮件客户端软件与,IMAP,服务器的通讯规则。,北京传智播客教育,SMTP,协议的命令,SMTP,命令及格式,说,明,Ehlo,ehlo,命令是,SMTP,邮件发送程序与,SMTP,邮件接收程序建立连接后必须发送的第一条,SMTP,命令,参数,表示,SMTP,邮件发送者的主机名。,ehlo,命令用于替代传统,SMTP,协议中的,helo,命令。,Auth,如果,SMTP,邮件接收程序需要,SMTP,邮件发送程序进行认证时,它会向,SMTP,邮件发送程序提示它所采用的认证方式,,SMTP,邮件发送程序接着应该使用这个命令回应,SMTP,邮件接收程序,参数,表示回应的认证方式,通常是,SMTP,邮件接收程序先前提示的认证方式。,MailFrom:,此命令用于指定邮件发送者的邮箱地址,参数,表示发件人的邮箱地址。,RcptTo:,此命令用于指定邮件接收者的邮箱地址,参数,表示接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用多条,RcptTo,命令来分别指定每一个接收者的邮箱地址。,Data,此命令用于表示,SMTP,邮件发送程序准备开始传送邮件内容,在这个命令后面发送的所有数据都将被当作邮件内容,直至遇到“,”,标识符,则表示邮件内容结束。,Quit,此命令表示要结束邮件发送过程,,SMTP,邮件接收程序接收到此命令后,将关闭与,SMTP,邮件发送程序的网络连接。,北京传智播客教育,POP3,协议的命令,命令及其使用格式,说 明,userusername,user,命令是,POP3,客户端程序与,POP3,邮件服务器建立连接后通常发送的第一条命令,参数,username,表示收件人,的帐户名称。,passpassword,pass,命令是在,user,命令成功通过后,,POP3,客户端程序接着发送的命令,它用于传递帐户的密码,参数,password,表示帐户的密码。,apop,name,digest,apop,命令用于替代,user,和,pass,命令,它以,MD5,数字摘要的形式向,POP3,邮件服务器提交帐户密码。,stat,stat,命令用于查询邮箱中的统计信息,例如,邮箱中有邮件数和邮件占用的字节大小等。,uidl,msg,#,uidl,命令用于查询某封邮件的唯一标识符,参数,msg,#,表示邮件的序号,是一个从,1,开始编号的数字。,list,msg,#,list,命令用于列出邮箱中的邮件信息,参数,msg,#,是一个可选参数,表示邮件的序号。当不指定参数时,,POP3,服务器列出邮箱中所有的邮件信息;当指定参数,msg,#,时,,POP3,服务器只返回该序号对应的邮件的信息。,retr,msg,#,list,命令用于获取某封邮件的内容,参数,msg,#,表示邮件的序号。,dele,msg,#,dele,命令用于在某封邮件上设置删除标记,参数,msg,#,表示邮件的序号。,POP3,服务器执行,dele,命令时,只是为邮件设置了删除标记,并没有真正把邮件删除掉,只有,POP3,客户端程序发出,quit,命令后,,POP3,服务器才会真正删除所有设置了删除标记的邮件。,rset,rset,命令用于清除所有邮件的删除标记。,top,msg,#n,top,命令用于获取某封邮件的邮件头和邮件体中的前,n,行内容,参数,msg,#,表示邮件的序号,参数,n,表示要返回邮件的前几行内容。使用这条命令以提高,Web Mail,系统(通过,Web,站点上收发邮件)中的邮件列表显示的处理效率,因为这种情况下不需要获取每封邮件的完整内容,而是仅仅需要获取每封邮件的邮件头信息。,noop,noop,命令用于检测,POP3,客户端与,POP3,服务器的连接情况。,quit,quit,命令表示要结束邮件接收过程,,POP3,服务器接收到此命令后,将删除所有设置了删除标记的邮件,并关闭与,POP3,客户端程序的网络连接。,北京传智播客教育,什么是,Java Mail,要自己写程序发送和接收邮件,可以直接采用,Socket,编程连接上远程的邮件服务器,然后按照邮件协议与邮件服务器进行交互,涉及较多细节。另外,要想自己编程创建出复杂的,MIME,格式的邮件,是一件非常困难和麻烦的事情。,JavaMail,是,Sun,公司为方便,Java,开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如,SMTP,、,POP3,、,IMAP,。,开发人员使用,JavaMail,API,编写邮件处理软件时,无须考虑邮件协议的底层实施细节,只要调用,JavaMail,开发包中相应的,API,类就可以了。,JavaMail,也提供了能够创建出各种复杂,MIME,格式的邮件内容的相关,API,。,北京传智播客教育,JavaMail,的体系结构与,API,分类,JavaMail,API,按其功能划分通常可分为如下三大类:,创建和解析邮件内容的,API,:,Message,类,是创建和解析邮件的核心,API,,它的实例对象代表一封电子邮件。,发送邮件的,API,:,Transport,类,是发送邮件的核心,API,类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如,SMTP,协议。,接收邮件的,API,:,Store,类,是接收邮件的核心,API,类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如,POP3,协议。,Session,类,Session,类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。,Session,对象根据这些信息构建用于邮件收发的,Transport,和,Store,对象,以及为客户端创建,Message,对象时提供信息支持。,北京传智播客教育,JAF,简介,JAF,(,JavaBeans Activation Framework,,,JavaBeans,激活框架)是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。,JAF,的主要作用在于让,Java,应用程序知道如何对一个数据源进行查看、编辑和打印等操作。对于通过,JAF,封装的数据,应用程序通过,JAF,提供的接口可以完成如下功能:,访问数据源中的数据,获知数据源的数据类型,获知可对数据进行的各种操作,用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象,JavaMail,API,可以利用,JAF,从某种数据源中读取数据和获知数据的,MIME,类型,并用这些数据生成,MIME,消息中的消息体和消息类型。,北京传智播客教育,邮件发送程序,使用,JavaMail,发送一封简单的邮件:,创建包含邮件服务器的网络连接信息的,Session,对象。,创建代表邮件内容的,Message,对象。,创建,Transport,对象、连接服务器、发送,Message,、关闭连接。,应用,Authenticator,类实现用户信息验证,结合,Transport.send,静态方法使用。,北京传智播客教育,邮件内容的组织结构,RFC822,邮件格式,MIME,协议,邮件编码,复合邮件结构分析,北京传智播客教育,复合邮件的整体结构图,北京传智播客教育,MIME,中的组合关系,北京传智播客教育,复合邮件的分隔线层次结构分析,北京传智播客教育,邮件组织结构相关的,API,MimeMessage,类表示整封邮件。,MimeBodyPart,类表示邮件的一个,MIME,消息。,MimeMultipart,类表示一个
展开阅读全文