




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章JavaMail编程,华北电力大学计算机科学与技术学院赵强email:zhaoqiang01,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,本章主要内容,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,常见电子邮件协议,SMTP(SimpleMailTransferProtocol,简单邮件传输协议)POP(PostOfficeProtocol,邮局协议)IMAP(InternetMessageAccessProtocol,Internet消息访问协议)MIME(MultipurposeInternetMailExtensions,多用途Internet邮件扩展标准)不是邮件传输协议,它只定义了需要传输的消息、附件及其他类型数据的格式。,常见电子邮件协议(续),发送邮件使用邮件发送协议,现在常用的是SMTP;接受邮件使用邮件接受协议,常用的是POP3和IMAP;,常见电子邮件协议(续),客户机A,客户机B,SMTP,POP3/IMAP,接受邮件服务器A,发送邮件服务器B,JavaMail体系可以分为三层:抽象层Internet邮件实现层协议实现层,JavaMail抽象层:该层定义了用于邮件处理功能的抽象类、接口和抽象方法,所有的邮件系统都支持这些功能,它独立于供应商和协议消息。抽象层位于JavaMail顶级包(即javax.mail)内。Internet邮件实现层:该层实现了部分抽象层元素,它遵循Internet标准RFC822和MIME。Internet邮件实现层所定义的类和接口大多位于ernet包内。协议实现层:该层由服务提供商实现对特定协议的支持,如SMTP、POP、IMAP和NNTP。Sun为开发者提供了很完备的一组协议的支持。,核心JavaMailAPI可以分为两部分,一部分由七个主要对象组成:Session、Message、Address、Authenticator、Transport、Store和Folder,利用这些对象可以完成包括发送消息、检索消息、删除消息、认证、回复消息、转发消息、管理附件、处理基于HTML文件格式的消息及搜索或过滤邮件列表等任务。核心JavaMailAPI的另一部分的主要接口和类包括Part、Message、Bodypart、Multipart、MimePart、MimeMessage、MimiBodypart和MimeMultipart,可以用这些类和接口完成电子邮件的阅读、撰写等任务。,安装和配置Mail服务器,使用MerakMailServler公司提供的Mail服务器使用版本。Setup.exe,Mail.jarActivation.jar将以上二个包放在一个目录,并在classpath中说明。,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,P198页的NewMail.jsp中的form表单,SendMail.java程序,P202页。,程序82:SendMail.java(片断),tryPropertiesprops=newProperties();SessionsendMailSession;Storestore;Transporttransport;sendMailSession=Session.getInstance(props,null);props.put(mail.smtp.host,host);MessagenewMessage=newMimeMessage(sendMailSession);newMessage.setFrom(newInternetAddress(request.getParameter(from);newMessage.setRecipient(Message.RecipientType.TO,newInternetAddress(request.getParameter(to);newMessage.setSubject(request.getParameter(subject);newMessage.setSentDate(newDate();newMessage.setText(request.getParameter(text);Transport.send(newMessage);/显示发送成功的提示out.println(theEmailsendsucess!);,JavaMailAPI的中文问题。,如果开发者使用setSubject()方法直接设定中文的主题或者使用setText()方法直接指定中文内容,那么在使用Outlook等客户端软件查看邮件时客户有可能看到的将是一团乱码。解决方案?只需要指定邮件主题和邮件正文的字符集为“ISO-8859-1”即可。,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,为了防止恶意用户利用SMTP服务器进行发送垃圾邮件等破坏活动,SMTP服务器一般需要身份验证。只有通过了身份验证的用户才有权利用SMTP服务器发送邮件。,javaMail用类javax.mail.Authenticator来进行用户认证。验证信息需要通过Session传给邮件服务器,所以Session对象的getInstance有以下的变形staticSessiongetInstance(Propertiesprop,Authenticatorauth);staticSessiongetDefaultInstance(Propertiesprop,Authenticatorauth);其中的Authenticator负责密码校验。如果不需要验证身份,就用null做第二个参数,或者直接用单参数的getInstance。如果Session是需要密码的,那么Session会自动发出如下调用javax.mail.PasswordAuthenticationgetPasswordAuthentication();PasswordAuthentication只是一个包装类,里面包了用户名和密码。因此如果要实现SMTP认证的邮件发送,必须首先自己定义一个继承javax.mail.Authenticatior的类。,程序84:Auth.javaimportjavax.mail.Authenticator;importjavax.mail.PasswordAuthentication;publicclassAuthextendsAuthenticatorStringusername=;Stringpassword=;publicAuth(Stringusername,Stringpassword)this.username=username;this.password=password;publicPasswordAuthenticationgetPasswordAuthentication()returnnewPasswordAuthentication(username,password);,程序85:sendAuthmail.java(片段),/初始化收件人邮件地址、发件人邮件地址和主机名,下面的各初始化字符串均为任意设置Stringto=teacher;Stringfrom=student;Stringhost=;/创建一个属性对象Propertiesprops=newProperties();/指定发送邮件服务器,使用smtp协议props.put(mail.smtp.host,host);props.put(mail.smtp.auth,true);Authau=newAuth(hyl,123456);/获取会话Sessionsession=Session.getInstance(props,au);try/创建消息,设置邮件发件人地址、收件人地址、主题MimeMessagemsg=newMimeMessage(session);msg.setFrom(newInternetAddress(from);msg.addRecipient(Message.RecipientType.TO,newInternetAddress(to);msg.setSubject(sendExample);/开始设置消息内容msg.setSentDate(newDate();Stringtext=Hi,thisisEmailbyauthentication!;msg.setText(text);/发送邮件Transport.send(msg);/显示发送成功的提示out.println(theEmailsendsucess!);catch(MessagingExceptione)/异常处理out.println(theEmailsendfailed!);out.println(e.toString();,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,接收邮件过程比较简单,但是接收的方式和服务器有很大的关系:是IMAP的服务器还是普通的POP服务器,支持多少个文件夹,支持多少种邮件标记。这些都需要事先了解好或者用程序去探测。,JavaMail基础知识发送简单邮件发送SMTP身份认证的邮件接收邮件邮件附件的处理,发送附件,发送附件非常像转发消息,程序开发人员需要建立各部分以组成完整消息,完成消息正文后,即开始添加其他部件,其中每个DataHandler都代表附件,而不是转发消息情况下的共享处理程序。如果从文件中读附件,附件的数据源是FileDataSource。而如果从URL中读时,附件的数据源是URLDataSource。一旦存在DataSource,只要先把它传递给DataHandler构造器,最后再用setDataHandler()把它附加到BodyPart。假定要保留附件的原始文件名,最终要做的是用BodyPart的setFileName()方法设置与附件相关的文件名。,程序812:SendAttachmentMail.java(片段),/正文部分BodyPartmessageBodyPart=newMimeBodyPart();/FillthemessageStringcontentMessage=request.getParameter(body);messageBodyPart.setText(contentMessage);Multipartmultipart=newMimeMultipart();multipart.addBodyPart(messageBodyPart);/ParttwoisattachmentStringfilename=request.getParameter(thefile);messageBodyPart=newMimeBodyPart();DataSourcesource=newFileDataSource(filename);messageBodyPart.setDataHandler(newDataHandler(source);messageBodyPart.setFileName(filename);multipart.addBodyPart(messageBodyPart);/PutpartsinmessagemimeMsg.setContent(multipart);/SendthemessageTransport.send(mimeMsg);,接收附件,从邮件中获取附件比发送它们要困难,因为MIME没有简单的关于附件的概念。当消息包含附件时,消息的内容是个Multipart对象。接着,开发者需要处理每个Part,获取主要内容和附件。标有从part.getDisposition()获得的Part.ATTACHMENT配置(disposition)的部件(Part)无疑就是附件。但是,没有配置(及一个非文本MIME类型)和带Part.INLINE配置的部件也可能是附件。当配置要么是Part.ATTACHMENT,要么是Part.INLINE时,这个消息部件的内容就能被保存。只要用getFileName()和getInputStream()就能分别得到原始文件名和输入流。,程序813:ReceiveMimeMail.java(片段),Multipartmp=(Multipart)messagenid.getContent();StringszFile=;Fileffile;/Stringszpath=;for(inti=0,n=mp.getCount();i+fullpath;elseif(disposition=null)MimeBo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石嘴山工贸职业技术学院《水工程施工》2023-2024学年第一学期期末试卷
- 西安财经大学《系统理论数学基础》2023-2024学年第二学期期末试卷
- 《腾讯战略投资》课件
- 2025海鲜供货合同
- 2025至2031年中国化纤纺织原料行业投资前景及策略咨询研究报告
- 2025至2030年中国高尔夫发球杆数据监测研究报告
- 2025至2030年中国钢槽轮数据监测研究报告
- 2025至2030年中国线缆外护层开剥刀数据监测研究报告
- 2025至2030年中国糖果柜数据监测研究报告
- 罩棚吊顶喷漆施工方案
- 供应链管理师考试的终极试题及答案
- 2025安徽中医药大学辅导员考试题库
- 跌倒坠床的预防及护理
- 智慧树知到《演讲学(同济大学)》2025章节测试附答案
- 人教版小学三年级语文下册2024-2025学年度第二学期期中质量检测试卷
- 生物技术合成天然香料香精课件
- 华东师大版初中科学九年级上册知识点
- 2025年度文化产业竞业禁止与知识产权保护协议
- JJF(冀) 105-2011 烟气采样器地方规程
- 国家开放大学《小企业管理基础》综合练习题形成性考核参考答案
- 上海外服笔试题目
评论
0/150
提交评论