• 1. Java邮件开发王昭珽北京传智播客教育 www.itcast.cn
  • 2. 为什么要学习邮件开发许多办公自动化项目(OA)中都要附带发送邮件的功能. 在许多网站项目中也都需要附带发送邮件的功能,即要求软件开发人员在WEB应用中编写相应的邮件处理程序。 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail 给过生日的注册会员自动发送一封表示祝贺的E-Mail 将网站的最新活动信息通过E-Mail发送给所有的注册会员 北京传智播客教育 www.itcast.cn
  • 3. 如何学习邮件开发学习邮件开发包括两大方面: 发送与接收邮件 创建与解析邮件内容北京传智播客教育 www.itcast.cn
  • 4. 电子邮件的一些基本常识邮件服务器 电子邮箱 邮件客户端软件 邮件传输协议 电子邮件的传输过程 北京传智播客教育 www.itcast.cn
  • 5. 邮件服务器 电子邮件服务器主要提供以下功能: (1)接收用户投递的邮件; (2)将用户投递进来的邮件转发给目标邮件服务器; (3)接收其他邮件服务器转发来的邮件并把邮件存储到其管理的用户邮箱中; (4)为前来读取邮件的用户提供读取服务。邮件服务器按通讯协议可以划分为两种类型: SMTP服务器 (发送邮件) POP3/IMAP服务器 (接收)北京传智播客教育 www.itcast.cn
  • 6. http://mail.163.com/邮件服务器北京传智播客教育 www.itcast.cn
  • 7. http://mail.sina.com邮件服务器北京传智播客教育 www.itcast.cn
  • 8. http://mail.sohu.com邮件服务器北京传智播客教育 www.itcast.cn
  • 9. 电子邮箱与邮件客户端软件 电子邮箱: 每个电子邮件服务器之上都可以开设多个电子邮箱,电子邮箱也称之为E-mail地址,它类似现实生活中的通讯地址,用户可通过这个地址接收别人发来的电子邮件和向别人发送电子邮件。电子邮箱的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。邮件服务器把接收到的邮件保存到为某个帐户所分配的邮箱空间中,用户通过其申请的用户名和密码登陆到邮件服务器上查收该地址已收到的电子邮件。邮件客户端软件: 邮件客户端软件负责与邮件服务器通讯,主要用于帮助用户将邮件发送给SMTP服务器和从POP3/IMAP邮件服务器读取用户的电子邮件。邮件客户端软件通常集邮件撰写、发送和接收功能于一体。北京传智播客教育 www.itcast.cn
  • 10. 电子邮件的传输过程 北京传智播客教育 www.itcast.cn
  • 11. Sina邮件 服务器test@sina.comSohu邮件 服务器test_itcast@sohu.comSina sohu客户端smtpsmtppop3北京传智播客教育 www.itcast.cn
  • 12. Test 邮件服务器test@fs.comTest_itcast 邮件服务器test_itcast@fs.com客户端smtpsmtppop3outLook客户端软件北京传智播客教育 www.itcast.cn
  • 13. 邮件传输协议SMTP协议 全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。 POP3协议 全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。 IMAP协议 全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。北京传智播客教育 www.itcast.cn
  • 14. SMTP协议的命令SMTP命令及格式说 明Ehloehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后必须发送的第一条SMTP命令,参数表示SMTP邮件发送者的主机名。ehlo命令用于替代传统SMTP协议中的helo命令。Auth如果SMTP邮件接收程序需要SMTP邮件发送程序进行认证时,它会向SMTP邮件发送程序提示它所采用的认证方式,SMTP邮件发送程序接着应该使用这个命令回应SMTP邮件接收程序,参数表示回应的认证方式,通常是SMTP邮件接收程序先前提示的认证方式。MailFrom:此命令用于指定邮件发送者的邮箱地址,参数表示发件人的邮箱地址。RcptTo:此命令用于指定邮件接收者的邮箱地址,参数表示接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用多条RcptTo命令来分别指定每一个接收者的邮箱地址。Data此命令用于表示SMTP邮件发送程序准备开始传送邮件内容,在这个命令后面发送的所有数据都将被当作邮件内容,直至遇到“”标识符,则表示邮件内容结束。Quit此命令表示要结束邮件发送过程,SMTP邮件接收程序接收到此命令后,将关闭与SMTP邮件发送程序的网络连接。北京传智播客教育 www.itcast.cn
  • 15. POP3协议的命令命令及其使用格式说 明userusernameuser命令是POP3客户端程序与POP3邮件服务器建立连接后通常发送的第一条命令,参数username表示收件人的帐户名称。passpasswordpass命令是在user命令成功通过后,POP3客户端程序接着发送的命令,它用于传递帐户的密码,参数password表示帐户的密码。apopname,digestapop命令用于替代user和pass命令,它以MD5数字摘要的形式向POP3邮件服务器提交帐户密码。statstat命令用于查询邮箱中的统计信息,例如,邮箱中有邮件数和邮件占用的字节大小等。uidlmsg#uidl命令用于查询某封邮件的唯一标识符,参数msg#表示邮件的序号,是一个从1开始编号的数字。list[msg#]list命令用于列出邮箱中的邮件信息,参数msg#是一个可选参数,表示邮件的序号。当不指定参数时,POP3服务器列出邮箱中所有的邮件信息;当指定参数msg#时,POP3服务器只返回该序号对应的邮件的信息。retrmsg#list命令用于获取某封邮件的内容,参数msg#表示邮件的序号。delemsg#dele命令用于在某封邮件上设置删除标记,参数msg#表示邮件的序号。POP3服务器执行dele命令时,只是为邮件设置了删除标记,并没有真正把邮件删除掉,只有POP3客户端程序发出quit命令后,POP3服务器才会真正删除所有设置了删除标记的邮件。rsetrset命令用于清除所有邮件的删除标记。topmsg#ntop命令用于获取某封邮件的邮件头和邮件体中的前n行内容,参数msg#表示邮件的序号,参数n表示要返回邮件的前几行内容。使用这条命令以提高Web Mail系统(通过Web站点上收发邮件)中的邮件列表显示的处理效率,因为这种情况下不需要获取每封邮件的完整内容,而是仅仅需要获取每封邮件的邮件头信息。noopnoop命令用于检测POP3客户端与POP3服务器的连接情况。quitquit命令表示要结束邮件接收过程,POP3服务器接收到此命令后,将删除所有设置了删除标记的邮件,并关闭与POP3客户端程序的网络连接。北京传智播客教育 www.itcast.cn
  • 16. 通过命令发送邮件北京传智播客教育 www.itcast.cn
  • 17. 什么是Java Mail要自己写程序发送和接收邮件,可以直接采用Socket编程连接上远程的邮件服务器,然后按照邮件协议与邮件服务器进行交互,涉及较多细节。另外,要想自己编程创建出复杂的MIME格式的邮件,是一件非常困难和麻烦的事情。 JavaMail 是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP、POP3、IMAP。 开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议的底层实施细节,只要调用JavaMail开发包中相应的API类就可以了。 JavaMail 也提供了能够创建出各种复杂MIME格式的邮件内容的相关API。北京传智播客教育 www.itcast.cn
  • 18. JavaMail 的体系结构与API分类JavaMail API按其功能划分通常可分为如下三大类: 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。 发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。 接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。 Session类 Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。 北京传智播客教育 www.itcast.cn
  • 19. 邮件发送程序使用JavaMail发送一封简单的邮件: 创建包含邮件服务器的网络连接信息的Session对象。 创建代表邮件内容的Message对象。 创建Transport对象、连接服务器、发送Message、关闭连接。 北京传智播客教育 www.itcast.cn
  • 20. 复杂邮件内容的组织结构RFC822邮件格式: MIME协议----MIME,英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范,在MIME出现之前,互联网电子邮件主要遵循由RFC 822所制定的标准,电子邮件一般只用来传递基本的ASCII码文本信息,MIME在 RFC 822的基础上对电子邮件规范做了大量的扩展,引入了新的格式规范和编码方式,在MIME的支持下,图像、声音、动画等二进制文件都可方便的通过电子邮件来进行传递,极大地丰富了电子邮件的功能。目前互联网上使用的基本都是遵循MIME规范的电子邮件。 北京传智播客教育 www.itcast.cn
  • 21. MIME中的组合关系北京传智播客教育 www.itcast.cn
  • 22. multipart类型基本格式  * multipart/mixed类型     如果一封邮件中含有附件,那邮件的Content-Type域中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下: Content-Type: multipart/mixed;                    boundary="{分段标识}" * multipart/alternative类型     MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的其它内容分成不同的段。基本格式如下: Content-Type: multipart/alternative;                    boundary="{分段标识}"北京传智播客教育 www.itcast.cn
  • 23. multipart类型基本格式* multipart/related类型     MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。比如我们在发送html格式的邮件内容时,可能使用图像作为html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。基本格式如下: Content-Type: multipart/related;                    type="multipart/alternative";                    boundary="{分段标识}" 北京传智播客教育 www.itcast.cn
  • 24. 邮件组织结构相关的APIMimeMessage类表示整封邮件。 MimeBodyPart类表示邮件的一个MIME消息。 MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。北京传智播客教育 www.itcast.cn
  • 25. 邮件结构MiMEMessage (整封邮件)MIME消息头正文(alternative )内嵌资源(related )附件(mixed )MimeBodyPart设置邮件主题等多个MimeBodyPart 组合成MimeMultipartMimeMessage类表示整封邮件。 MimeBodyPart类表示邮件的一个MIME消息。 MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。北京传智播客教育 www.itcast.cn
  • 26. JAF简介 JAF(JavaBeans Activation Framework,JavaBeans激活框架)是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。 JAF的主要作用在于让Java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成如下功能: 访问数据源中的数据 获知数据源的数据类型 获知可对数据进行的各种操作 用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象 JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的MIME类型,并用这些数据生成MIME消息中的消息体和消息类型。 北京传智播客教育 www.itcast.cn
  • 27. 附录上课测试用的电子邮箱: 用户名:test_itcast@sina.com 密码:123456 用户名:test_itcast@sohu.com 密码:123456 北京传智播客教育 www.itcast.cn
  • 28. sinasohu客户端(写邮件) From test@sina.com To test@sohu.comsmtpSmtp pop3北京传智播客教育 www.itcast.cn