J2EE课件-第9章JavaMail编程.ppt_第1页
J2EE课件-第9章JavaMail编程.ppt_第2页
J2EE课件-第9章JavaMail编程.ppt_第3页
J2EE课件-第9章JavaMail编程.ppt_第4页
J2EE课件-第9章JavaMail编程.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第九章 Java Mail 编程,,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理,本章主要内容,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理,常见电子邮件协议,SMTP (Simple Mail Transfer Protocol,简单邮件传输协议) POP(Post Office Protocol,邮局协议) IMAP(Internet Message Access Protocol,Internet 消息访问协议) MIME(Multipurpose Internet Mail Extensions,多用途Internet 邮件扩展标准)不是邮件传输协议,它只定义了需要传输的消息、附件及其他类型数据的格式。,Java Mail体系可以分为三层: 抽象层 Internet 邮件实现层 协议实现层,Java Mail抽象层:该层定义了用于邮件处理功能的抽象类、接口和抽象方法,所有的邮件系统都支持这些功能,它独立于供应商和协议消息。抽象层位于Java Mail 顶级包(即javax.mail)内。 Internet 邮件实现层:该层实现了部分抽象层元素,它遵循Internet 标准RFC822和MIME。Internet 邮件实现层所定义的类和接口大多位于ernet 包内。 协议实现层:该层由服务提供商实现对特定协议的支持,如SMTP、POP、IMAP 和NNTP。Sun 为开发者提供了很完备的一组协议的支持。,核心Java Mail API 可以分为两部分,一部分由七个主要对象组成:Session、Message、Address、Authenticator、Transport、Store 和Folder,利用这些对象可以完成包括发送消息、检索消息、删除消息、认证、回复消息、转发消息、管理附件、处理基于HTML 文件格式的消息及搜索或过滤邮件列表等任务 核心Java Mail API 的另一部分的主要接口和类包括Part、Message、Bodypart、Multipart、MimePart、MimeMessage、MimiBodypart 和MimeMultipart,可以用这些类和接口完成电子邮件的阅读、撰写等任务。,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理,程序82:SendMail.java(片断),try Properties props = new Properties(); Session sendMailSession; Store store; Transport transport; sendMailSession = Session.getInstance(props, null); props.put(“mail.smtp.host“, host); Message newMessage = new MimeMessage(sendMailSession); newMessage.setFrom(new InternetAddress(request.getParameter(“from“); newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress ( request.getParameter (“to“); newMessage.setSubject(request.getParameter(“subject“); newMessage.setSentDate(new Date(); newMessage.setText(request.getParameter(“text“); Transport.send(newMessage); /显示发送成功的提示 out.println(“ the Email send sucess!“);,Java Mail API 的中文问题。,如果开发者使用setSubject()方法直接设定中文的主题或者使用setText()方法直接指定中文内容,那么在使用Outlook 等客户端软件查看邮件时客户有可能看到的将是一团乱码。 解决方案?只需要指定邮件主题和邮件正文的字符集为“ISO-8859-1” 即可。,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理,为了防止恶意用户利用SMTP 服务器进行发送垃圾邮件等破坏活动,SMTP 服务器一般需要身份验证。只有通过了身份验证的用户才有权利利用SMTP 服务器发送邮件。,javaMail 用类javax.mail.Authenticator来进行用户认证。验证信息需要通过Session 传给邮件服务器,所以Session 对象的getInstance 有以下的变形 static Session getInstance(Properties prop,Authenticator auth); static Session getDefaultInstance(Properties prop,Authenticator auth); 其中的Authenticator 负责密码校验。如果不需要验证身份,就用null 做第二个参数,或者直接用单参数的getInstance。如果Session 是需要密码的,那么Session 会自动发出如下调用 javax.mail.PasswordAuthentication getPasswordAuthentication(); PasswordAuthentication 只是一个包装类,里面包了用户名和密码。因此如果要实现SMTP认证的邮件发送,必须首先自己定义一个继承javax.mail.Authenticatior的类。,程序84:Auth.java import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class Auth extends Authenticator String username=“; String password=“; public Auth(String username,String password) this.username=username; this.password=password; public PasswordAuthentication getPasswordAuthentication() return new PasswordAuthentication( username, password); ,程序85: sendAuthmail.java(片段),/初始化收件人邮件地址、发件人邮件地址和主机名,下面的各初始化字符串均为任意设置 String to = ““; String from = ““; String host =““ ; /创建一个属性对象 Properties props = new Properties(); /指定发送邮件服务器,使用smtp 协议 props.put(“mail.smtp.host“, host); props.put(“mail.smtp.auth“,“true“); Auth au=new Auth(“hyl“,“123456“); /获取会话 Session session = Session.getInstance(props, au); try /创建消息,设置邮件发件人地址、收件人地址、主题 MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to); msg.setSubject(“send Example“); / 开始设置消息内容 msg.setSentDate(new Date(); String text=“Hi, this is Email by authentication!“; msg.setText(text); / 发送邮件 Transport.send(msg); /显示发送成功的提示 out.println(“ the Email send sucess!“); catch (MessagingException e) /异常处理 out.println(“ the Email send failed!“); out.println(e.toString(); ,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理,接收邮件过程比较简单,但是接收的方式和服务器有很大的关系:是IMAP的服务器还是普通的POP服务器,支持多少个文件夹,支持多少种邮件标记。这些都需要事先了解好或者用程序去探测。,JavaMail基础知识 发送简单邮件 发送SMTP身份认证的邮件 接收邮件 邮件附件的处理 ,发送附件,发送附件非常像转发消息,程序开发人员需要建立各部分以组成完整消息,完成消息正文后,即开始添加其他部件,其中每个 DataHandler 都代表附件,而不是转发消息情况下的共享处理程序。如果从文件中读附件,附件的数据源是 FileDataSource。而如果从 URL 中读时,附件的数据源是 URLDataSource。一旦存在 DataSource,只要先把它传递给 DataHandler 构造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定要保留附件的原始文件名,最终要做的是用 BodyPart 的 setFileName() 方法设置与附件相关的文件名。,程序812:SendAttachmentMail.java(片段),/ 正文部分 BodyPart messageBodyPart = new MimeBodyPart(); / Fill the message String contentMessage=request.getParameter(“body“); messageBodyPart.setText(contentMessage); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); / Part two is attachment String filename=request.getParameter(“thefile“); messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); / Put parts in message mimeMsg.setContent(multipart); / Send the message Transport.send(mimeMsg);,接收附件,从邮件中获取附件比发送它们要困难,因为 MIME 没有简单的关于附件的概念。当消息包含附件时,消息的内容是个 Multipart 对象。接着,开发者需要处理每个 Part,获取主要内容和附件。标有从 part.getDisposition() 获得的 Part.ATTACHMENT 配置(disposition)的部件(Part)无疑就是附件。但是,没有配置(及一个非文本 MIME 类型)和带 Part.INLINE 配置的部件也可能是附件。当配置要么是 Part.ATTACHMENT,要么是 Part.INLINE 时,这个消息部件的内容就能被保存。只要用 getFileName() 和 getInputStream() 就能分别得到原始文件名和输入流。,程序813: ReceiveMimeMail.java(片段),Multipart mp = (Multipart)messagenid.getContent(); String szFile=“; File ffile; /String szpath=“; for (int i=0,n=mp.getCount(); i“ +fullpath ; else if(disposition= =null) MimeBodyPart mbp = (

温馨提示

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

评论

0/150

提交评论