• 1. Java邮件开发详解讲师:张孝祥北京传智播客教育 www.itcast.cn
  • 2. 配套书籍北京传智播客教育 www.itcast.cn
  • 3. Java邮件开发介绍课程目标 为什么要学习和如何学习邮件开发 电子邮件的一些基本常识 准备实验环境 SMTP协议与POP3协议 什么是Java Mail 编写邮件发送程序 邮件内容的组织结构与邮件内容创建程序 邮件接收程序的简要介绍北京传智播客教育 www.itcast.cn
  • 4. 课程目标用程序代码生成一封带附件和内嵌图片的复杂邮件(效果演示) 用自己的程序代码将复杂邮件发送出去(效果演示) 一些特殊的经验和高级应用 中文名的邮件附件的乱码问题 Tomcat中JavaMail支持与冲突问题 SMTP邮件服务器程序的开发北京传智播客教育 www.itcast.cn
  • 5. 为什么要学习邮件开发曾经很赚钱的技术: 丁磊早期就是靠邮件起家,参看收集的网络资料 我本人对外承接的第一个项目也是邮件系统 对找工作有帮助: 我们好几个学员毕业后出去都在做邮件相关的项目,其中一个有意义的项目是将邮件内容发布成BBS的帖子。 许多办公自动化项目(OA)中都要附带发送邮件的功能,譬如我们要给学员发送通知,使用OutLook等手工方式就不合适,需要提高工作效率,让工作能够自动化,这也算是 信息化建设的一部分吧! 在许多网站项目中也都需要附带发送邮件的功能,即要求软件开发人员在WEB应用中编写相应的邮件处理程序。 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail 给过生日的注册会员自动发送一封表示祝贺的E-Mail 将网站的最新活动信息通过E-Mail发送给所有的注册会员 北京传智播客教育 www.itcast.cn
  • 6. 如何学习邮件开发学习邮件开发包括两大方面: 发送与接收邮件 创建与解析邮件内容 北京传智播客教育 www.itcast.cn
  • 7. 电子邮件的一些基本常识邮件服务器 电子邮箱 邮件客户端软件 邮件传输协议 电子邮件的传输过程 北京传智播客教育 www.itcast.cn
  • 8. 邮件服务器 电子邮件服务器主要提供以下功能: (1)接收用户投递的邮件; (2)将用户投递进来的邮件转发给目标邮件服务器; (3)接收其他邮件服务器转发来的邮件并把邮件存储到其管理的用户邮中; (4)为前来读取邮件的用户提供读取服务。邮件服务器按通讯协议可以划分为两种类型: SMTP服务器 POP3/IMAP服务器 北京传智播客教育 www.itcast.cn
  • 9. 电子邮箱与邮件客户端软件 电子邮箱: 每个电子邮件服务器之上都可以开设多个电子邮箱,电子邮箱也称之为E-mail地址,它类似现实生活中的通讯地址,用户可通过这个地址接收别人发来的电子邮件和向别人发送电子邮件。电子邮箱的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。邮件服务器把接收到的邮件保存到为某个帐户所分配的邮箱空间中,用户通过其申请的用户名和密码登陆到邮件服务器上查收该地址已收到的电子邮件。邮件客户端软件: 邮件客户端软件负责与邮件服务器通讯,主要用于帮助用户将邮件发送给SMTP服务器和从POP3/IMAP邮件服务器读取用户的电子邮件。邮件客户端软件通常集邮件撰写、发送和接收功能于一体。北京传智播客教育 www.itcast.cn
  • 10. 电子邮件的传输过程 北京传智播客教育 www.itcast.cn
  • 11. 准备实验环境提前在sina和sohu上开设一个免费帐号 获取smtp和pop3服务器的名称 在outlook中配置sina帐户 使用outlook发送和接收邮件北京传智播客教育 www.itcast.cn
  • 12. sinaItcast_test@sina.comsohuItcast_test@sohu.comsmtpsmtppop3北京传智播客教育 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. 什么是Java Mail要自己写程序发送和接收邮件,可以直接采用Socket编程连接上远程的邮件服务器,然后按照邮件协议与邮件服务器进行交互,涉及较多细节。另外,要想自己编程创建出复杂的MIME格式的邮件,是一件非常困难和麻烦的事情。 JavaMail 是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP、POP3、IMAP。 开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议的底层实施细节,只要调用JavaMail开发包中相应的API类就可以了。 JavaMail 也提供了能够创建出各种复杂MIME格式的邮件内容的相关API。北京传智播客教育 www.itcast.cn
  • 17. JavaMail 的体系结构与API分类JavaMail API按其功能划分通常可分为如下三大类: 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。 发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。 接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。 Session类 Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。 北京传智播客教育 www.itcast.cn
  • 18. JAF简介 JAF(JavaBeans Activation Framework,JavaBeans激活框架)是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。 JAF的主要作用在于让Java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成如下功能: 访问数据源中的数据 获知数据源的数据类型 获知可对数据进行的各种操作 用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象 JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的MIME类型,并用这些数据生成MIME消息中的消息体和消息类型。 北京传智播客教育 www.itcast.cn
  • 19. 邮件发送程序使用JavaMail发送一封简单的邮件: 创建包含邮件服务器的网络连接信息的Session对象。 创建代表邮件内容的Message对象。 创建Transport对象、连接服务器、发送Message、关闭连接。 应用Authenticator类实现用户信息验证 结合Transport.send静态方法使用。 北京传智播客教育 www.itcast.cn
  • 20. 邮件内容的组织结构RFC822邮件格式 MIME协议 邮件编码 复合邮件结构分析北京传智播客教育 www.itcast.cn
  • 21. 复合邮件的整体结构图北京传智播客教育 www.itcast.cn
  • 22. MIME中的组合关系北京传智播客教育 www.itcast.cn
  • 23. 复合邮件的分隔线层次结构分析北京传智播客教育 www.itcast.cn
  • 24. 邮件组织结构相关的APIMimeMessage类表示整封邮件。 MimeBodyPart类表示邮件的一个MIME消息。 MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。北京传智播客教育 www.itcast.cn
  • 25. 邮件内容创建程序简单邮件内容 包含内嵌图片的复杂邮件 包含内嵌图片和附件的复杂邮件 中文名的邮件附件的乱码问题 收件人和发件人的地址中附带友好名称 让回复地址与发件人地址不同 北京传智播客教育 www.itcast.cn
  • 26. 在Web应用程序中增加邮件发送功能北京传智播客教育 www.itcast.cn
  • 27. Web邮件发送的界面示意系统配置 会员管理 产品管理 权限管理 新闻发布 邮件发送 注销 后台管理系统收件人:选择邮件正文:附件1:附件2:附件3:发送 单击后调出查询界面北京传智播客教育 www.itcast.cn
  • 28. Tomcat中JavaMail支持与冲突用普通方式在web应用程序中增加邮件发送功能 先演示在eclipse没有导入mail.jar可以编译,但部署运行有问题的原因 用Tomcat支持的JNDI资源方式,步骤: 配置JNDI资源。 将mail.jar拷贝到/lib目录下。 在Java程序中使用JNDI API获得mail的session对象。 分析类加载的冲突问题北京传智播客教育 www.itcast.cn
  • 29. Webapp/lib/mail.jarJndi contextJndi apitomcat北京传智播客教育 www.itcast.cn
  • 30. SMTP邮件服务器程序SMTP邮件服务器与客户端程序的技术差异, SMTP邮件服务器既能收,也能发。发的时候怎样得知其他域的邮件服务器的地址? smtp服务器又分为两类,例如sina的,这两类服务器在接收邮件时也存在技术差异。北京传智播客教育 www.itcast.cn
  • 31. SMTP邮件服务器程序配置与查看DNS服务器 验证DNS服务的作用 MX( mail box )记录 域名解析原理北京传智播客教育 www.itcast.cn
  • 32. 域名解析原理一个域中的每个主机名与其IP地址的映射关系由这个域的DNS服务器负责管理,例如,“www.it315.org”、“ftp.it315.org”、“blog.it315.org”等主机名都由管理域“it315.org”的DNS服务器进行管理,而不能由管理域“org”的DNS服务器进行管理。 每个子域都必须在其直接父域的DNS服务器上注册该子域的名称和该子域的DNS服务器的IP地址,例如,必须在管理域“org”的DNS服务器注册子域“it315.org”和管理子域“it315.org”的DNS服务器的IP地址后,域名“it315.org”才能真正被外界所认可。 为了方便对顶级域名的统一管理,在顶级域名之上其实还有一个根域名,根域名用点(.)表示,例如,“www.it315.org”也可以写为“www.it315.org.”,“www.it315.org.”中的最后的那个点(.)就表示根域名。 Internet中的根域名由InterNIC(国际互联网络信息中心)集中管理,顶级域名和其下的域名则由拥有该域名的组织、公司和个人自己管理。 北京传智播客教育 www.itcast.cn
  • 33. 域名解析方式一北京传智播客教育 www.itcast.cn
  • 34. 域名解析方式二北京传智播客教育 www.itcast.cn
  • 35. 推荐我所编写的书籍《Java就业培训教程》 《Javascript网页开发》 《Java邮件开发详解》 《深入体验Java Web开发内幕—核心基础》 《深入体验Java Web开发内幕—高级特性》北京传智播客教育 www.itcast.cn
  • 36. 结束语 热烈欢迎各软件公司到传智播客公司预定和招聘软件开发人才! 谢谢!北京传智播客教育 www.itcast.cn