javamail ppt

简介 相关

截图

javamail ppt

简介

这是javamail ppt,包括了JavaMail基础知识,发送简单邮件,发送SMTP身份认证的邮件,接收邮件,邮件附件的处理等内容,欢迎点击下载。

javamail ppt是由红软PPT免费下载网推荐的一款课件PPT类型的PowerPoint.

第八章 Java Mail 编程 常见电子邮件协议 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 邮件实现层所定义的类和接口大多位于javax.mail.internet 包内。 协议实现层:该层由服务提供商实现对特定协议的支持,如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,可以用这些类和接口完成电子邮件的阅读、撰写等任务。 程序8-2: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” 即可。 为了防止恶意用户利用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的类。 程序8-4: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); } } 程序8-5: sendAuthmail.java(片段) //初始化收件人邮件地址、发件人邮件地址和主机名,下面的各初始化字符串均为任意设置 String to = "teacher@hyl.com"; String from = "student@hyl.com"; String host ="127.0.0.1" ; //创建一个属性对象 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()); } 接收邮件过程比较简单,但是接收的方式和服务器有很大的关系:是IMAP的服务器还是普通的POP服务器,支持多少个文件夹,支持多少种邮件标记。这些都需要事先了解好或者用程序去探测。 发送附件 发送附件非常像转发消息,程序开发人员需要建立各部分以组成完整消息,完成消息正文后,即开始添加其他部件,其中每个 DataHandler 都代表附件,而不是转发消息情况下的共享处理程序。如果从文件中读附件,附件的数据源是 FileDataSource。而如果从 URL 中读时,附件的数据源是 URLDataSource。一旦存在 DataSource,只要先把它传递给 DataHandler 构造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定要保留附件的原始文件名,最终要做的是用 BodyPart 的 setFileName() 方法设置与附件相关的文件名。 程序8-12: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() 就能分别得到原始文件名和输入流。 程序8-13: ReceiveMimeMail.java(片段) Multipart mp = (Multipart)message[nid].getContent(); String szFile=""; File ffile; //String szpath=""; for (int i=0,n=mp.getCount(); issy红软基地

展开

同类推荐

热门PPT

相关PPT