基于JAVAGUI的电子邮件客户端软件的设计与实现_第1页
基于JAVAGUI的电子邮件客户端软件的设计与实现_第2页
基于JAVAGUI的电子邮件客户端软件的设计与实现_第3页
基于JAVAGUI的电子邮件客户端软件的设计与实现_第4页
基于JAVAGUI的电子邮件客户端软件的设计与实现_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、1 摘 要本系统是用 java 语言实现的一个 email 客户端,主要用到 java gui 图形界面设计和 java mail 工具包,它适用于所有用户,无管理员设置,可以实现网络邮箱的邮件发送和邮件收取的基本功能,还具有通讯录的存储功能,针对用户的需求,本email 客户端具有以下两大模块:1基本设置模块 ; 此模块主要包括用户设置和邮箱设置两大内容: 1.1 用户设置:主要设置用户的一些基本信息,如用户名,用户密码等设置1.2 邮箱设置:主要设置邮箱服务器,smtp,pop3 等2. email功能模块;此模块根据大众用户的需求划分了以下三个部分:2.1 收取邮件功能 ; 2.2 发送

2、邮件功能;2.3 通讯录功能;该系统的开发过程为:1.email 客户端的需求分析;2.email 客户端的系统分析;3.email 客户端的功能模块划分划分;4.email 客户端的数据库设计;5.email 客户端的界面设计;6.email 客户端的功能模块设计及代码实现关键字 :java,java gui,java mail 2 abstract this email client system is developed in java language using java gui and java mail tools .it can be used by any users who

3、 want to use it . the system is not including manager settings and it can finish the function of sending and accepting mails in web mail system, it can store user information a function like a address book in the web. the systems need to achieve the overall function to run two parts, as follows 1. t

4、he basic settings two parts are followed: 1.1 maintenance system administrators basic information; 1.2 student response functions; 2. email functions three function will be available 2.1 sending mails 2.2 receiving mails 2.3 address book the system development process : 1. email client needs analysi

5、s; 2. email client system analysis; 3. email client function modules partition; 4. email client design; 5. email client interface design; 6. email client functional design and code modules to achieve key word:java , java gui ,java mail 3 目录前言. 4 第 1 章 系统概述及系统分析 - - 51.1 系统概述 . 5 1.1.1 基本设置模块- 51.1.2

6、 email功能模块 - 51.2 需求分析 . 5 1.3 可行性分析 . 5 1.3.1 技术可行性分析- 51.3.2 环境可行性分析- 61.3.3 经济可行性分析- 6第 2 章 系统开发基本介绍 - - 72.1 选题背景与目的 - 72 .2 系统开发工具 - - 72 .3 系统开发环境 - - 72 .4 开发技术概述- 72 .4.1 j2ee概述 - 72 .4.2 java gui - 82 .4.3 java mail - - 9第 3 章 系统总体设计 - - 103 .1 系统功能模块划分 - 103 .2 系统具体功能模块基本介绍- 103 .2.1 发件箱 -

7、 - 103 .2.2 收件箱 - - 113 .2.3 通讯录 - - 11第 4 章 系统详细设计及系统实现- - 134 .1 章节内容总体介绍 - 134 .2 各模块功能详细设计- 134 .2.1 发送邮件功能的实现 - - 134 .2.1.1 发送普通邮件功能 - - 134 .2.1.2 邮件附件的功能实现 - 194 .2.2 收取邮件功能的实现 - - 204 .2.3 通讯录功能的实现 - - 284 .2.4其他功能 - 314 .2.4.1 其他界面实现与通讯录的连接功能- 314 .2.4.2 邮件未存储对用户提示功能- 314 .2.4.3 复制、删除邮件功能

8、- 324 .2.4.4 用户信息设置功能 - - 34结束语 - - 36谢辞. 37 参考文献 . 38 4 前言邮件系统是一套单独的系统, 要有自己的服务器 , 在邮件系统中可以设多个域, 每个域中可以设多个用户 , 比如说我买了 anymacro或快客的邮件系统 , 可以进行多项设置 . 它的数据是放在自己的服务器上. 随着信息技术的提高,网络的普及于发展,越来越多的网络工具随之产生出来,网络邮箱就是其中之一,它可以通过网络来实现人们之间的通信,可以给人们的工作带来极大的方便,同时也缩短了人与人之间的距离,使人们在通信上需要花费的时间更短。该email客户端不仅仅具有网络邮箱的功能,它

9、可以让用户绑定多个邮箱,可以说是多个网络邮箱的公共接口,不进方便了人们的工作,还做到了有效利用网络的信息资源,极大的提高人们的工作效率,减少了很多的工作量。因此它应该是能够得到用户欢迎的一个系统。5 第 1 章 系统概述及系统分析1.1 系统概述随着信息技术的提高,网络的普及于发展,越来越多的网络工具随之产生出来,网络邮箱就是其中之一,它可以通过网络来实现人们之间的通信,可以给人们的工作带来极大的方便,同时也缩短了人与人之间的距离,使人们在通信上需要花费的时间更短。该 email 客户端不仅仅具有网络邮箱的功能,它可以让用户绑定多个邮箱,可以说是多个网络邮箱的公共接口,不进方便了人们的工作,还

10、做到了有效利用网络的信息资源,极大的提高人们的工作效率,减少了很多的工作量。该系统的功能模块主要由以下部分组成:1.1.1基本设置模块该模块可以完成此用户设置和邮箱设置两大内容,其中用户设置可以完成用户的一些基本信息的设置,包括用户名、用户密码、联系方式、邮政编码、通讯地址、邮箱地址,并可以对其进行存储、浏览、查看、删除、修改、打印等操作。邮箱设置可以完成对所使用邮箱的邮箱服务器、smtp、pop3的一些设置,也可以对这些设置进行存储、浏览、查看、删除、修改等操作。1.1.2 email功能模块该模块可以完成网络邮箱的收取邮件、发送邮件、保存邮件的功能,并可以对这些邮件进行存储、转发、群发、浏

11、览、删除、修改、打印等操作。此模块还具有通讯录的功能,可以存储其他网络邮箱用户的用户名和邮箱地址进行存储、修改等功能。1.2 需求分析 email客户端的设计目的是要为了实现网络邮箱的邮件发送和收取的以些功能。为使用邮箱的用户提供便利。系统所面对的用户可以是任何普通用户,系统对于一个用户只允许以一种身份登录。用户登录后可以对系统进行管理,其主要操作是维护个人的基本信息, 对其信息进行修改、存储等操作。将系统需求加以总结,得出系统需求如下:系统可以运行任何操作系统平台上,并具有友好的用户界面。系统用户类型为:任何普通用户。1.3 可行性分析1.3.1 技术可行性分析java 很有雄心的宣言 wr

12、ite once, run anywhere许诺:一个具有下拉菜单,命6 令按钮,滚动条以及其他常见的gui 控件的应用程序将能够在各种操作系统上运行而不必重新编译成针对某一平台的二进制代码,包括microsoft windows, suns own solaris, apples mac os以及 linux 。1.3.2 环境可行性分析java 很有雄心的宣言write once, run anywhere许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的gui控件的应用程序将能够在各种操作系统上 运 行 而 不 必 重 新 编 译 成 针 对 某 一 平 台 的 二 进 制 代 码

13、, 包 括microsoft windows, suns own solaris, apples mac os以及 linux 。也就是说本系统可以跨平台使用.1.3.3 经济可行性分析开发此系统所用软件可在网络上下载使用。7 第 2 章 系统开发基本介绍2.1 选题背景与目的随着信息技术的提高,网络的普及于发展,越来越多的网络工具随之产生出来,网络邮箱就是其中之一,它可以通过网络来实现人们之间的通信,可以给人们的工作带来极大的方便,同时也缩短了人与人之间的距离,使人们在通信上需要花费的时间更短。该email客户端不仅仅具有网络邮箱的功能,它可以让用户绑定多个邮箱,可以说是多个网络邮箱的公共接

14、口,不进方便了人们的工作,还做到了有效利用网络的信息资源,极大的提高人们的工作效率,减少了很多的工作量。正是因为该系统所具有的这些优点才开发了此系统。2 .2 系统开发工具本系统在开发过程中使用java gui 和 java 中 java mail 工具包实现了email 的收发和一些基本的管理功能。2 .3 系统开发环境在软件环境方面,系统的开发环境如下:操作系统: s use linux;开发平台: java;2 .4 开发技术概述2 .4.1 j2ee 概述j2ee是美国 sun公司刚刚推出的一种全新概念的模型,与传统的互联网应用程序模型相比有着不可比拟的优势。目前,java 2平台有

15、3 个版本,它们是适用于小型设备和智能卡的java 2平台micro版(java 2 platform micro edition,j2me)、适用于桌面系统的 java 2平台标准版( java 2 platform standard edition,j2se) 、适用于创建服务器应用程序和服务的java 2平台企业版(java 2 platform enterprise edition ,j2ee)。j2ee是一种利用 java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。j2ee技术的基础就是核心 java平台或java 2平台的标准版, j2ee不仅巩固了标准版

16、中的许多优点,例如编写一次、随处运行的特性、方便存取数据库的jdbc(java database connectivity )应用程序接口 (api, 8 application program interface)技术以及能够在 internet应用中保护数据的安全模式等等,同时还提供了对ejb(enterprise javabeans )、java servlets api 、jsp(java server pages )以及xml 技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。2 .4.2 java gui当java 在 1995年的春天第一次发布

17、的时候,它包含了一个叫awt(abstract windowing toolkit) 的库,用来构建图形用户界面应用程序。java 很有雄心的宣言 write once, run anywhere许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的 gui控件的应用程序将能够在各种操作系统上运行而不必重新编译成针对某一平台的二进制代码,包括microsoft windows, sun s own solaris, apples mac os以及linux。为了方便用 java构建图形用户界面, sun最初提供了一个在所有平台下具有的独特java 外观的图形界面库。sun在 applet 技术

18、策略方面的首要伙伴netscape提出 applets应该维持和运行时平台一样的外观。 他们希望 applets在某一平台下在显示和行为上能够像其他应用程序一样。为了实现 netscape的本地外观 的目标,在 jdk 的第一个发布版中包含了awt 这个库。awt 的缺省实现使用了 对等机制,即每一个java gui 窗口部件都在底层的窗口系统中有一个对应的组件。例如,每一个 java.awt.button 对象将在底层窗口系统中创建一个唯一对应的button。当用户点击那个按钮的时候, 事件将从本地实现库传送到java虚拟机里, 并且最终传送到与java.awt.button 对象相关联的逻

19、辑。对等系统的实现以及java组件与对等组件之间的交流的实现都隐藏在底层jvm 实现中, java语言级的代码仍然跨平台。于 1997年 javaone大会上提出并在 1998年 5 月发布的 jfc(java foundation classes) 包含了一个新的使用java窗口开发包。这个新的gui 组件叫做 swing,感觉到它是对 awt的升级,并且看起来对java占据计算机世界很有帮助。尽管swing仅仅是这个新组件的指代名称,它一直持续使用到今天。 可能是因为这个名称太贴切了, swing 尝试着以以下几种方式改变公认的观点:awt 依赖对等架构,用java代码包装本地窗口部件,

20、swing 却根本不使用本地代码和本地窗口部件awt 把绘制屏幕交给本地窗口部件, swing 自己的组件绘制自己 ,因为 swing 不依赖本地窗口部件,它可以抛弃 awt 的最小公分母的方法并在每个平台下实现每个窗口部件,从而创建一个比awt更强大的开发工具包从最开始 java就提供了构建跨平台的窗口gui 应用程序库,从awt ,swing 到现在的 swt 和 jface 。最初的工具包能力微弱,但是后来提供的工具包认识到之前工具包的缺9 点并取得了巨大的进步。 swt 和 jface不仅使 java成为一个构建桌面应用程序的可行的选择,也使之成为一个具有优势的开发平台。尽管过去对得到

21、轻便和强大的java系统的尝试必然意味着接受它在gui 方面的缺点, 如今这个不足已经不存在了, java终于可以统领它在桌面计算应用方面的位置了。2 .4.3 java mail想将邮件工具结合到您独立于平台的java 解决方案中吗?再没有比javamail api 更合适的了,它提供了个独立于协议的模块,能用于imap 、pop、 smtp、mime 和其它涉及因特网的消息传递协议。现在,有了javabeans activation framework (jaf )的支持,您的应用程序经由javamail api 就能启用邮件功能啦。10 收件箱第 3 章 系统总体设计3 .1 系统功能模

22、块划分模块分析是描述系统需求的一个过程,需要将需求分析中的感性描述进行抽象,提取出要实现的功能,这是整个系统开发的一个关键过程。模块分析的第一步,是描述email 客户端的功能,以此确定系统的功能需求。本email 客户端对任何一个用户都是普通用户,无管理员设置,对每一个用户都具有普通邮箱所具有的收取、发送邮件的功能,因此根据用户操作需求,将系统划分为如下功能,并对其模块的划分和功能进行描述.整个系统的模块结构如图3.1 所示,此图将 email 客户端划分为三大模块,这些模块又是由若干个子模块构成的,形成一个结构紧凑功能明确完整,子模块的划分见 3.2 系统具体功能模块的基本介绍。图 3.1

23、 3 .2 系统具体功能模块基本介绍本部分主要介绍 email 客户端的一些基本功能, 主要描述了收件箱、 发件箱、和通讯录所具有的功能,详细设计见第4 章内容。3 .2.1 发件箱发件箱可以通过用户设置发送用户所需要的邮件信息,本页面可以实现查看已保存邮件信息、重发已发邮件、转发所收邮件、邮件标记、编辑邮件、新建邮件、删除邮件和打印邮件、发送,抄送、密送、发送附件、存储邮件、未存储提示等功能,具体功能图如图3.2.1 email 客户端发件箱通讯录发件箱11 发送已存邮件重发邮件编辑邮件存储邮件删除邮件查看保存邮件打印邮件新建邮件转发邮件邮件标记编辑邮件存储邮件删除邮件查看邮件打印邮件群转发

24、邮件图 3.2.13 .2.2 收件箱收件箱可以通过用户设置收取用户所需要的邮件信息,本页面可以实现查看所收取的邮件信息、转发邮件、群发邮件、邮件标记(标记已读和未读)、编辑和存储邮件、删除邮件和打印邮件等功能,具体功能图如图3.2.2 图 3.2.23 .2.3 通讯录通讯录可以存储用户的好友信息,可以方便用户完成对邮件信息的发送,尤其是转发和群组发送功能,通讯录的存在在很大程度上方便了使用系统的用户。本通讯录可以实现查看好友、增加好友、删除好友、编辑好友信息、删除好友信息等功能,本系统还可以建立多个通讯录,每个通讯录都可以对所存用户进行分组,以便方便邮件的发送,存储通讯录的文件还可以转存,

25、即修改当前通讯录的存放位置,其基本功能图如图3.2.3 收件箱12 增加好有删除好友编辑通讯录文件删除通讯录删除好友查看好友增加新通讯录编辑好友信息图 3.2.3 通讯录13 第 4 章 系统详细设计及系统实现4 .1 章节内容总体介绍系统分析完成后,进入系统的设计阶段这是整个系统实现过程中非常重要的一个阶段。本章节描述了系统设计的详细过程和内容及实现过程。4 .2 各模块功能详细设计4 .2.1 发送邮件功能的实现4 .2.1.1 发送普通邮件功能实现此功能需要引入java mail 工具包中的以下包import javax.mail.*; import erne

26、t.*; 构造 sendmail 类的主要代码如下public class sendmail private string smtp,mailfrom,mailto,mailcc,mailtitle,mailbody,mailencode; private string username,userpass; 14 private object attachfilelist; private boolean isauthentic = false; public sendmail() /初始化参数代码段this.smtp = ; this.mailfrom =; this.mailto = ;

27、this.mailcc = ; this.mailtitle = ; this.mailbody = ; this.mailencode = big5; /为用户提供参数设置接口/在本系统中通过以下方法实现对用户写入的信息加以传递public void setfrom(string from)this.mailfrom = from; public void setto(string to)this.mailto = to; public void setcc(string cc)this.mailcc = cc; public void setbody(string body)this.ma

28、ilbody = body; public void settitle(string title)this.mailtitle = title; public void setsmtp(string smtp)this.smtp = smtp; public void setusername(string username)this.username = username; public void setpassword(string pass)this.userpass = pass; public void setattachfile(object filelistary) this.at

29、tachfilelist = filelistary; 15 /设置文字编码代码如下public void setencode(string encode)this.mailencode = encode; public int send(boolean hassmtpauth) this.isauthentic = hassmtpauth;/检查参数是否安全if(!checkparameters(isauthentic) return 1; else properties prop = new properties();/ 设定 smtp server prop.put(mail.smtp.

30、host,this.smtp); session mailconn = session.getdefaultinstance(prop,null); message msg = new mimemessage(mailconn); try msg.setheader(content-transfer-encoding,this.mailencode); reencode(); /设置邮件的地址和邮件的编码msg.setfrom(new internetaddress(this.mailfrom); /set reciever e-mail address and nickname msg.se

31、trecipient(message.recipienttype.to, new internetaddress(this.mailto); if(this.mailcc.trim().length()!=0) msg.setrecipient(message.recipienttype.cc, new internetaddress(this.mailcc); /设定信件标题if(this.mailtitle.trim().length()=0) 16 msg.setsubject(无标题信件 ); else msg.setsubject(this.mailtitle); multipart

32、 mp = new mimemultipart(); mimebodypart mbpbody = new mimebodypart(); mbpbody.setcontent(this.mailbody+ this.mailencode); mimebodypart mbpfile; for(int i=0;iattachfilelist.length;i+) string fullpath = this.tobig5(attachfilelisti.tostring(); mbpfile = new mimebodypart(); filedatasource fds = new file

33、datasource(fullpath); mbpfile.setdatahandler(new datahandler(fds); mbpfile.setfilename(fds.getname(); mp.addbodypart(mbpfile); mp.addbodypart(mbpbody); /將內容加入msg.setcontent(mp); if(isauthentic) / 送信prop.put(mail.smtp.auth,isauthentic); transport trans = mailconn.gettransport(smtp); try trans.connect

34、(this.smtp,this.username,this.userpass); trans.sendmessage(msg,msg.getallrecipients(); return 0; 17 catch(exception ex) ex.printstacktrace(); return 2; finally trans.close(); else try transport.send(msg); return 0; catch(sendfailedexception ex) system.out.println(ex.tostring(); return 3; catch(excep

35、tion ex) ex.printstacktrace(); return 4; private boolean checkparameters(boolean hassmtpauth) if(smtp.trim().length()=0 | mailfrom.trim().length()=0 | mailto.trim().length()=0) return false; 18 else if(hassmtpauth) if(this.username.trim().length()=0) return false; else return true; else return true;

36、 private void reencode() if(this.mailencode.touppercase()=big5) this.mailfrom = tobig5(mailfrom); this.mailto = tobig5(mailto); this.mailtitle = tobig5(mailtitle); this.mailbody = tobig5(mailbody); else if(this.mailencode.touppercase()=utf8) this.mailfrom = toutf8(mailfrom); this.mailto = toutf8(mai

37、lto); this.mailtitle = toutf8(mailtitle); this.mailbody = toutf8(mailbody); private string toutf8(string str) try 19 str = mimeutility.encodetext(str,utf-8, b); return str; catch (exception ex) return str; 图 新建邮件要发送邮件之需要使用已经建好的sendmail 类即可,功能代码如下:sendmail mail=new sendmail();mail.setmailto(*

38、); mail.setmailfrom(*); mailsend(); 4 .2.1.2 邮件附件的功能实现此功能实现代码如下 : public class attachexample public static void main (string args) throws exception string host = args0; string from = args1; string to = args2; string fileattachment = args3; / 获得系统参数20 properties props = system.getproperties(); /设置邮件的

39、服务器props.put(mail.smtp.host, host); / 获得 session session session = session.getinstance(props, null); mimemessage message = new mimemessage(session); / define message message.setfrom(new internetaddress(from); message.addrecipient(message.recipienttype.to,new internetaddress(to); message.setsubject(h

40、ello javamail attachment); mimebodypart messagebodypart =new mimebodypart();/ create the message part messagebodypart.settext(hi);/fill message multipart multipart = new mimemultipart(); multipart.addbodypart(messagebodypart); / part two is attachment messagebodypart = new mimebodypart(); datasource

41、 source = new filedatasource(fileattachment); messagebodypart.setdatahandler(new datahandler(source); messagebodypart.setfilename(fileattachment); multipart.addbodypart(messagebodypart); / 将多个附件加入信件中message.setcontent(multipart); / 发送带附件的邮件,此功能代码结束transport.send( message ); 4 .2.2 收取邮件功能的实现邮 件 的 收 取

42、 可 以 使 用java mail api的 方 法 , 主 要 的 操 作 过 程 为 : 获 取21 javax.mail.session实例,并进而获得javax.mail.store 实例。利用 javax.mail.store 实例获得缺省收件箱 (inbox)javax.mail.folder 实例。使用 javax.mail.folder 对象提取新邮件,存储为 javax.mail.message对象数组。创建 javax.mail.fetchprofile 以(潜在地 )优化对特定邮件组成成分的提取。这里的javax.mail.fetchprofile 类提供邮件协议提供者可

43、选参数,其目的是更有效地实现邮件组成成分的预提取此功能的主要代码如下:string pers = null; string addr = null; if(a instanceof internetaddress &(pers=(internetaddress)a).getpersonal()!=null) addr=pers+ +; else addr = a.tostring();return addr; session mailsession=session.getinstance(system.getproperties(),null); mailsession.setdebu

44、g(false); store store=mailsession.getstore(protocol);/protocol 为连接协议, imap 或是 pop store.connect(mailhost,-1,user,passwd);/mailhost 主机, user为用户名, passwd为密码folder folder = store.getfolder(inbox); try folder.open(folder.read_write); catch (messagingexception ex) folder.open(folder.read_only); message m

45、essage=folder.getmessages(); 22 fetchprofile fp=new fetchprofile(); fp.add(fetchprofile.item.envelope); fp.add(fetchprofile.item.flags); fp.add(x-mailer); folder.fetch(message,fp); int id=0,j=0; for(int i=0;irequest.getparameter(id).length();i+)/假设要阅读第 id 个邮件。id=id*10+(request.getparameter(id).chara

46、t(i)-48); for(j=0;jid;j+); messagej.setflag(flags.flag.seen,true); out.println(“ 主题: ” +messagej.getsubject(); string from=new string(); address fr=messagej.getfrom(); if(fr!=null) boolean tf=true; for(int i=0;ifr.length;i+) from=from+getdisplayaddress(fr); out.println(“from ”+from+); object o=messa

47、gej.getcontent(); if (messagej.ismimetype(text/plain) / 就可直接读出了。out.println(string)o+ ); else if(messagej.ismimetype(multipart/*) multipart mp=(multipart)o; part part=mp.getbodypart(0); string msg=(string)part.getcontent(); stringbuffer buf=new stringbuffer(msg.length()+6); 23 char ch= ; for(int i=0

48、;imsg.length();i+)/ 若遇到换行就转为 ch=msg.charat(i); if(ch=n)buf.append(); else buf.append(ch); out.println(buf.tostring(); else out.println( 现在还无法显示: +messagej.getcontenttype(); folder.close(true); store.close(); string pers = null; string addr = null; if(a instanceof internetaddress &(pers=(internet

49、address)a).getpersonal()!=null) addr=pers+ +; else addr = a.tostring();return addr; session mailsession=session.getinstance(system.getproperties(),null); mailsession.setdebug(false); store store=mailsession.getstore(protocol);/protocol 为连接协议, imap 或是 pop store.connect(mailhost,-1,user,passwd);/mailh

50、ost 主机, user 为用户名, passwd为密码folder folder = store.getfolder(inbox); try 24 folder.open(folder.read_write); catch (messagingexception ex) folder.open(folder.read_only); message message=folder.getmessages(); fetchprofile fp=new fetchprofile(); fp.add(fetchprofile.item.envelope); fp.add(fetchprofile.it

51、em.flags); fp.add(x-mailer); folder.fetch(message,fp); int id=0,j=0; for(int i=0;irequest.getparameter(id).length();i+)/ 假设要阅读第 id 个邮件。id=id*10+(request.getparameter(id).charat(i)-48); for(j=0;jid;j+); messagej.setflag(flags.flag.seen,true); out.println(“ 主题: ” +messagej.getsubject(); string from=ne

52、w string(); address fr=messagej.getfrom(); if(fr!=null) boolean tf=true; for(int i=0;ifr.length;i+) from=from+getdisplayaddress(fr); out.println(“from ”+from+); object o=messagej.getcontent(); 25 if (messagej.ismimetype(text/plain) / 就可直接读出了。out.println(string)o+ ); else if(messagej.ismimetype(multi

53、part/*) multipart mp=(multipart)o; part part=mp.getbodypart(0); string msg=(string)part.getcontent(); stringbuffer buf=new stringbuffer(msg.length()+6); char ch= ; for(int i=0;imsg.length();i+)/ 若遇到换行就转为 ch=msg.charat(i); if(ch=n)buf.append(); else buf.append(ch); out.println(buf.tostring(); else ou

54、t.println( 现在还无法显示: +messagej.getcontenttype(); folder.close(true); store.close(); 在 folder 对象中可以用 getmessagecount() 和 getunreadmessagecount() 方法来取得总共有多少封信和共有多少封信未读。但是如果我们需要在我们的java 项目中增加对 hotmail 邮箱(此邮箱有一个限制就是它并不提供 pop3或者 smtp 服务,也就是说一般的邮件客户端工具无法使用这个邮箱) 的支持,那往往会不知从什么地方开始入手,因为sun 公司提供的 java mail本身并不

55、提供对除了 pop3/imap 以及 smtp 外其他协议的支持。如何解决此问题呢 ? 但事实上, java mail只是定义了一组平台无关、独立于通讯协议的邮件程序框架,或者说是接口,它是作为java 的可选包存在的。因此可以这样说:java mail 并不关心所使用的协议,不管是pop3 、smtp 、imap当然还有 hotmail 用的 http26 协议。对于 java mail的客户端而言也是这样的,下图就是一个最简单的java mail结构图,通过transport进行邮件的发送,通过store 实现对邮件的收取,而不同协议的实现,java mail里的概念叫做provider

56、,只需要根据java mail定义的接口实现自己的provider即可。为了实现通过java mail访问 hotmail邮箱,我们就需要架起java mail接口与hotmail 服务所提供的访问接口之间的桥梁。在这之前我们必须首先了解hotmail 所使用的接口协议。hotmail 通过地址 http:/ http:/ 的这个地址,后面这个地址是提供给用户一个基于浏览器的访问界面以便对邮箱进行操作,你当然可以通过编写http客户端程序来解析页面并获取邮件的信息,但是这样做不仅实现的复杂程度非常高,而且每次页面风格发生变化后程序都要做相应的调整,因此不具备通用性,显然是不可行的。而地址htt

57、p:/ 则不同,它提供了固定的应用27 程序接口。当你使用浏览器访问该地址的时候,会弹出下面要求登录的窗体:而当输入正确的用户名和口令后会再弹出一次或两次该提示窗口,但提示信息不同,操作完成后出现页面无法显示的错误,错误码是405 (资源不允许)。因此该服务并不允许通过浏览器来访问。事实上 hotmail 使用的是webdav 来提供基于http 协议的应用编程接口,webdav(web 分布式创作和版本控制)已经成为重要的web 通讯协议。 webdav 所要解决的问题是:1.改写保护: http 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。使用we

58、bdav,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资源感兴趣,或者防止其他客户端访问该资源。2.资源管理:http 只能直接访问单个资源。webdav 提供一种更有效地组织数据的方法。webdav 引入了可包含资源的集合(类似于文件系统文件夹)概念。通过webdav 进行的资源管理包括如下功能:创建、移动、复制和删除集合,以及集合中的资源或文件。3.文档属性:不同类型的数据具有唯一的属性,这有助于描述数据。例如,在电子邮件中,这些属性可能是发件人的姓名和接收邮件的时间。在协作文档中,这些属性可能是文档原始作者的姓名和最后一个编辑者的姓名。因为人们使用的文档类型各不相同,所以

59、可能的属性类型列表也变得无限大。xml 是 webdav 所需的一种可扩展通讯工具。关于 webdav 的更多资料可以参阅本文最后的参考资料。相对于自行解析hotmail 的浏览器页面而言,基于特定协议webdav 的接口使 hotmail 邮件客户端28 程序的实现更加稳定和可靠。在了解了javamail api 的基本接口以及hotmail 所提供接口的协议,本文的题目就变得非常具体了,就是如果编写基于webdav 的 javamail provider(javamail 提供者) 并使用这个提供者来实现hotmail 邮件收发功能,但这题目太大而且已经超过了一篇文章所能叙述的范围,因此我

60、们接下来将引入一个开放源码项目jdavmail ,并详细介绍如何通过这个项目实现hotmail 邮件的收发功能。jdavmail 是一个开放源码的javamail 的提供者项目,可以通过它来访问基于webdav 协议的邮件服务,有如hotmail 邮箱。你可以到http:/ 这个网址下载到最新版本的程序。 jdavmail 使用了 jakarta上的 commons httpclient 作为 http 客户端组件与服务器进行通讯,同时使用了jdom 进行 xml 数据的解析,另外由于httpclient 项目用到了commons logging 进行日记的输出,因此commons-logging 也是必须的

温馨提示

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

评论

0/150

提交评论