Java程序设计课设说明书-《简单邮件客户端》_第1页
Java程序设计课设说明书-《简单邮件客户端》_第2页
Java程序设计课设说明书-《简单邮件客户端》_第3页
Java程序设计课设说明书-《简单邮件客户端》_第4页
Java程序设计课设说明书-《简单邮件客户端》_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

《Java程序设计》课程设计报告题目:简单电子邮件客户端的设计学院:计算机科学与工程学院专业:计算机科学与技术学生姓名:王渝凯学号:1000350225指导教师:汪华登2014年6月24日目录一、设计任务及目标 31.1绪言 31.2目标 31.3设计任务 31.4需求分析 41.5技术上可行性分析 4二、总体设计 42.1电子邮件的组成 42.2电子邮件地址 52.3功能模块 52.4电子邮件报文格式 52.5小结 6三、详细设计 63.1SMTP协议发送信件 63.2SMTP协议 63.3相关代码实现 8四、结论 13五、任务完成情况 145.1.特色 145.2.不足 14参考文献 14附录 14一、设计任务及目标1.1绪言互联网技术的飞速发展引领人类进入了网络信息时代,而电子邮件已经取代传统书信成为人们交流和交换信息的重要途径。越来越多的人在使用它,而且使用它的人数将会继续增加,同时根据生活和交流的需要,同一个人同时拥有了多个邮件,这样人们为了发送和接收邮件需要登陆不同的网页,使得操作繁多浪费了很多宝贵的时间。为了解决这一问题研发出了电子客户端软件,通过本软件可以完成不同的邮箱账户的邮件收发功能,而不需登陆多个不同的网页。

本系统软件名为电子邮件客户端软件,是基于SMTP和POP3协议从底层播放器开发的,实现了邮件发送和接收的基本功能,并且能够附带邮件附件的发送和接收。SMTP全称是简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议,它专门用来发送邮件用的。其中类MailSend实现了SMTP协议的解析和实现邮件内容和附件发送的核心类。POP3是邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议,是专门用于接收邮件的。类MailReceive是利用成熟封装的DLL文件实现接收邮件内容和下载附件的核心类。经过测试,本系统能够准确实现纯文本邮件和带有附件的邮件的发送,以及邮件的接收和附件的下载。

虽然当前流行的各大邮件客户端软件比如Foxmail、OutlookExpress等都已实现邮件收发功能,但是除了最主要的收发信件之外,他们功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不实用。有鉴于此,在了解RFC底层协议的基础上,开发了这个各种功能相对简单实用的电子邮件客户端软件,简化了很多不必要的功能,它更容易掌握和使用。1.2目标完成一个电子邮件客户端软件,要求能够收取邮件、发送邮件、书写新邮件、具有图形化界面。能批量发送邮件。1.3设计任务完成一个桂林电子科技大学计算机科学与工程学院关于《Java程序设计》简单邮件客户端设计的工作。对桂林电子科技大学进行需求分析,根根需求分析对简单电子邮件的功能进行调整和完善。1.4需求分析本系统是采用java语言来开发的应用程序,实现简单电子邮件的发送与收取。电子邮件是Inernet上最受欢迎是一种应用,电子邮件能够克服传统电话应用中通信双方必须在场、一些不必要的电话经常打断正在进行的工作等问题。人们通过电子邮件客户端软件,把邮件发往收信人邮箱所在的电子邮件服务器,收信人子打开计算机上网时,通过邮件代理就会看到自己邮箱中的邮件。同时也可以克服普通的电话通信不能传送文件等数据的缺点,通过客户端,用户可以向收信人发送附件,收件人就可以通过邮件代理收到发信人发送的内容。电子邮件客户端具有方便实用、传递迅速和费用低廉等特点,电子邮件不仅可以传送文本信息,而且可以通过附件传送音频、视频文件。1.5技术上可行性分析基于javamail来开发该客户端软件,所以选用java作为开发工具,选用eclipse作为java编译器。

本系统软件名为电子邮件客户端软件,是基于SMTP和POP3协议从底层开发的,实现了邮件发送和接收的基本功能。本系统软件具有收取邮件、发送邮件、书写新邮件、具有图形化界面等功能。二、总体设计2.1电子邮件的组成一个电子邮件系统的包括电子邮件协议、用户代理和电子邮件户服务器。一个完整的电子邮件传输过程,及其用到的协议和构件的位置,如下图3--1所示,电子邮件胡武器采用客户端服务器模式。电子邮件服务使用运输层协议是TCP.发送邮件传输邮件接收邮件用户代理接收方邮件服务器发送方邮件服务器用户代理用户代理接收方邮件服务器发送方邮件服务器用户代理电子邮件协议规定如何在两个星湖通信的邮件进程之间交换信息,电子邮件协议包括简单邮件传输协议(SimpleMailTransferProtocol,SMTP)、邮局协议(PostOfficeProtocol,POP3)。发送方用户代理(UserAgent,UA)是用户与电子邮件飞的系统的接口,是在用户上网终端运行的软件,称为电子邮件客户端,用户通过UA发送和接收邮件。电子邮件服务器的功能是发送和接收邮件,使用SMTP协议发送邮件,使用POP3协议接收邮件,并向邮件发送者报告邮件传送的情况。2.2电子邮件地址Intertnet中有大量的电子邮件服务器,用户可以在一台邮件服务器上申请合法的用户账号,包括账号名和密码,申请成功后,邮件服务器为每个用户开辟一个存放用户邮件的空间,成为用户的电子邮箱。每个电子邮箱都有一个全球唯一的邮箱地址,也称为用户的电子邮箱地址。电子邮件有两部分组成,之间由@间隔,前一部分为用户在该邮件服务器中的账号,即信箱名,后一部分为邮件服务器的主机名(域名)。用户信箱名@邮箱和邮件服务器所在主机的域名例如163.com发送方电子邮件服务器负责接收用户发来的邮件,根据邮件的目的地址,发呆哦接收方的邮件服务器中。接收方的邮件服务器同时也负责接收从其他服务器发往其中的邮件,根据收件人的不同,将邮件分发到用户的电子邮箱。当然,接收方和发送方的邮箱也可以在一个邮件服务器中。2.3功能模块登录登录收取邮件收取邮件书写新邮件书写新邮件发送邮件发送邮件2.4电子邮件报文格式电子邮件报文格式由两部分组成:邮件首部(MailHead)和邮件主体(MailBody).RFC822规定了电子邮件的首部格式,邮件主体由用户自由撰写。电子邮件的首部邮件首部包括一些关键字描述的字段(后面加上冒号),如下表所示。邮件首部有多项内容构成,其中发件人地址、邮件发送的日期和时间等是由电子邮件应用程序根据系统设置自动产生的,而收件人地址,抄送人地址、邮件主题等是根据用户在创建邮件时输入的信息产生的。首部字段含义及后面内容Form发信人的邮件地址Date发信日期To一个或者多个收信人的邮件地址Subject邮件标题Cc抄送Bcc暗送Reply—To对方会信用的地址Received传输途中每个传输代理加上的信息邮件主体邮件报文首部后接一个空白行,下面是以ASCII格式给出的邮件主体。邮件主体是实际要发送的内容,传统的电子邮件系统智能传递文本信息。目前,使用Internet电子邮件扩展协议不但可以发送各种文字和各种结构的文本信息,而且可以发送语音、图像和视频等多媒体信息。建立读者可以通过Telnet应用程序与某一个电子邮件服务器连接,发送包含邮件首部的邮件报文,方法是在命令行方式下输入命令:telnetservername25,其中servername为电子邮件服务器域名。2.5小结网络上的E--mail传送有点像我们日常生活中发送的普通信件一样,首相把填好的邮件地址的信件交给邮局,再由邮局传递,最后头递给收信人。同样的,一封E--mail从用户的手中发出,首先有一个程序吧这封E--mail发到SMTP服务器(发送邮件服务器)上,再由发送邮件服务器传递又见到大目的信箱,收信人根据账号和口令接收信箱的邮件。很明显,完整的邮件程序至少需要四个部分:发送又见到服务器程序,我们把它叫做发送邮件客户端程序;负责在网络上传送邮件到信箱的程序;称之为SMTP服务器程序,接受并存储邮件并供用户提取的服务器程序;称之为POP3服务器程序,从POP3服务器收取邮件的程序,称之为接收邮件客户端程序。三、详细设计3.1SMTP协议发送信件SMTP服务器并不是邮件的目的地,它只是邮件的中间传递机构。发送邮件的客户端软件不用了解如何把邮件发送到目的信箱的服务器上,只告诉具有传递机制SMTP服务器一些必要的信息,接下来怎么投递就是SMTP服务器的事情了。3.2SMTP协议SMTP只能传送7位ASCII文本邮件。SMTP使用默认的端口号为25。SMTP规定如何在两个互相通信的SMTP进程之间交换信息,采用客户端服务器SMTP的工作过程:发送方和接收方邮件服务器之间的通信包括三个阶段:连接建立、邮件传输和连接释放。这里把发送方邮件服务器成为本地邮件服务器,或称为SMTP客户,把接收方邮件服务器称为远地邮件服务器,或称为SMTP服务器。交互过程中采用TCP连接。连接建立连接建立包括用户代理与本地邮件服务器(用户邮箱所处的邮件服务器,及发送方邮件服务器)的连接,以及本地邮件服务器与远地邮件服务器(接收方邮箱所处的邮件服务器)的连接。连接建立使用的电子邮件协议时SMTP。SMTP发件人通过自己计算机上的用户代理撰写和编辑要发送的电子邮件。发件人通过用户代理点击发送按钮,由用户代理完成发送邮件。用户代理使用默认端口号25与本地邮件服务器建立连接,把邮件先发送给本地邮件服务器缓存下来。本地邮件服务器作为SMTP客户,每隔一定时间对邮件缓存扫描一次,若有邮件发送,建立与远地邮件服务器连接的过程如下:使用默认端口号25与接收方电子邮件服务器(SMTP服务器)建立TCP连接。SMTP服务器回答“220Serviceready”,表示服务就绪,连接建立。SMTP客户发送HELO命令给SMTP服务器,附上发送方主机名字。SMTP服务器回答“250OK”,表示已经准备好接收,否则回答“421Servicenotavailible”,表示服务器不可用。发送方邮件服务器与接收方邮件服务器之间是直接通过运输层协议TCP连接的,中间不经过其他电子邮件服务器,尽管这两个邮件服务器的连接途径上可能要经过若干个路由器。可以看出,一个电子邮件服务器在作为发送方时,用作SMTP客户,若作为接收方时,用作SMTP服务器。SMTP客户和SMTP服务器实在后台工作的。电子邮件传输中的客户机和服务器,如下图所示。图中描述了发送和接收电子邮件的过程:①是客户端(发送方)SMTP发送电子邮件,采用SMTP协议②是发送方邮件服务器向接收方邮件服务器传输电子邮件,采用SMTP协议,此时发送方邮件服务器的作用相当于客户端,接收方邮件服务器的作用相当于服务器;③是客户端(接收方)接收邮件,采用的是POP3协议。②时相当于Client②时相当于ServerSMTP服务器()SMTPSMTP服务器()SMTP服务器()②SMTPSMTPPOP3客户端(发送方)客户端(接收方)客户端(发送方)客户端(接收方)电子邮件传输中的客户机和服务器3.3相关代码实现发信模块:privatevoidsendButtonActionPerformed(java.awt.event.ActionEventevt){setProperties();try{//用try包围的语句是java编译器认为有可能出现异常,所以让你提前处理。SessionmySession=createSession();MimeMessagemyMess=createMessage(mySession);Transporttransport=mySession.getTransport();transport.connect(getServer(),getUser(),getPassword());transport.sendMessage(myMess,myMess.getRecipients(Message.RecipientType.TO));transport.close();}catch(Exceptione){//catch{}是捕获上面的语句出现的异常,然后在catch里写方法处理这个异常!JOptionPane.showMessageDialog(this,"邮件发送失败!","提示",JOptionPane.INFORMATION_MESSAGE);System.out.println("发送失败!");}JOptionPane.showMessageDialog(this,"邮件发送成功!","提示",JOptionPane.INFORMATION_MESSAGE);}发送界面:发送成功后,显示发送成功:接收邮件模块:邮件接收通过POP3协议读取电子邮件包括三个步骤:特许,用户代理输入用户名和口令,获得读取邮件的许可;事务处理,用户读取文件报文,并对邮件进行处理;更新,在用户退出后,邮件服务器删除标记的邮件报文。POP3协议的会话过程如下图:POP3客户POP3POP3客户POP3服务器用户名用户名OKOKpasswordpasswordOKOK列清单列清单邮件数目与大小邮件数目与大小读取邮件1读取邮件1邮件1邮件1读取邮件读取邮件邮件邮件POP3服务器会在与用户代理的会话期间保留一些状态信息,例如,哪些邮件报文做了删除标记,但是POP3服务器不会在于代理用户的交互过程中携带状态信息,这样有利于POP3服务功能的实现。代码实现booleanconnectMess()throwsException{//连接服务器,使用POP3收取邮件:try{Stringhost="";//默认Propertiesprops=newProperties();props.put("mail.smtp.host",host);props.put("mail.smtp.auth","true");//这样才能通过验证Sessionsession=Session.getDefaultInstance(props);Storestore=session.getStore("pop3");//使用POP3会话机制,连接服务器store.connect(host,ad,pa);Folderfolder=store.getFolder("INBOX");//如果是收件箱folder.open(Folder.READ_WRITE);message=folder.getMessages();returntrue;}catch(Exceptione){returnfalse;}}voidshowMess(inti)throwsException{//邮件信息获取from=message[i].getFrom()[0].toString();sender.setText(from);title=message[i].getSubject();messTitle.setText(title);SimpleDateFormatsimpleFormat=newSimpleDateFormat("yy-MM-ddHH:mm");sendDay=simpleFormat.format(message[i].getSentDate());day.setText(sendDay);if(message[i].isMimeType("multipart/*")){//接收邮件代码Multipartmp=(Multipart)message[i].getContent();intbodyNum=mp.getCount();for(intj=0;j<bodyNum;j++){if(mp.getBodyPart(j).isMimeType("text/plain")){content=(String)mp.getBodyPart(j).getContent();}elseif(mp.getBodyPart(j).isMimeType("text/*")){content="html邮件类型";}}}else{content="不支持邮件类型";}messContent.setText(content);}收取邮件时,登陆到客户端,查看最新来信:对邮件进行解码:voidshowMess(inti)throwsException{//邮件信息获取,解析from=message[i].getFrom()[0].toString();sender.setText(from);title=message[i].getSubject();messTitle.setText(title);SimpleDateFormatsimpleFormat=newSimpleDateFormat("yy-MM-ddHH:mm");//获取,解析日期sendDay=simpleFormat.format(message[i].getSentDate());day.setText(sendDay);if(message[i].isMimeType("multipart/*")){//接收邮件代码Multipartmp=(Multipart)message[i].getContent();intbodyNum=mp.getCount();for(intj=0;j<bodyNum;j++){if(mp.getBodyPart(j).isMimeType("text/plain")){content=(String)mp.getBodyPart(j).getContent();}elseif(mp.getBodyPart(j).isMimeType("text/*")){content="html邮件类型";}}}else{content="不支持邮件类型";}messContent.setText(content);}四、结论电子邮件在Internet上发送和接收的原理可以很形象地用我们日常生活中邮寄包裹来形容:当我们要寄一个包裹的时候,我们首先要找到任何一个有这项业务的邮局,在填写完收件人姓名、地址等等之后包裹就寄出而到了收件人所在地的邮局,那么对方取包裹的时候就必须去这个邮局才能取出。同样的,当我们发送电子邮件的时候,这封邮件是由邮件发送服务器(任何一个都可以)发出,并根据收信人的地址判断对方的邮件接收服务器而将这封信发送到该服务器上,收信人要收取邮件也只能访问这个服务器才能够完成。SMTP(SimpleMailTransferProtocol)简易邮件传输通讯协议SMTP是互联网上的一种通讯协议,主要功能是用在传送电子邮件,当我们通过电子邮件程序,寄E-mil给另外一个人时,必须通过SMTP通讯协议,将邮件送到对方的邮件服务器上,等到对方上网的时候,就可以收到你所寄的信。其实简单的说,POP服务器是用来收信的,而且每个E_mail地址一般只有一个。如果你要同时收取多个邮箱的信件,就必须挨个设置每个邮箱的POP3服务器地址。你别告诉我找不到,告诉你一个小窍门吧:在你申请了免费信箱之后,仔细看看它的帮助文件,一般都能找到。至于SMTP服务器,可以理解为就是用来寄信的,而且大多数SMTP服务器也是免费的,也就是说,不管你有无E-mail信箱,只要想寄信,随便填上一个SMTP服务器,就可以寄信了。如果你用OutlookExpress或者其它邮件程序发信,又同时拥有多个免费邮箱,不必设置多个SMTP服务器,只要选择一个填上就行了,比如新浪邮件提供的服务器就是:。该客户端软件可以实现收取信件,发送新邮件,并对新邮件进行保存到草稿箱,起到备注的作用,同时可以发送附件,方便使用。五、任务完成情况基本实现了所有的功能,包括发送新邮件,书写新邮件,收取邮件,具有图形化界面,达到了课设的要求。5.1.特色可以不用登录WEB,即可从客户端收邮件。

2.如果在客户端设置为自动登录,那么只需点一下,就可以进入邮件收发。

3.如果你的电脑装了杀毒软件,它还可以在收邮件时进行杀毒。而WEB邮件的杀毒只能靠服务商了。5.2.不足最大的不足就是不能收取下载附件,没有多人发送功能,界面不够美观(做的时候觉得没必要)。参考文献《基于WINDOWS环境POP3协议邮件接收客户端的实现》,卢秉亮,王玉湘,许莉,沈阳航空工业学院学报《使用JavaMailAPI实现电子邮件客户端》,杨宁,晋东南师范专科学校学报《Java课程设计》(第二版),耿祥义,清华大学出版社。《Java课程设计案例精编》,张广彬等,清华大学出版社。附录接收关键代码publicMessReceivor(Stringad,Stringpa){this.ad=ad;this.pa=pa;try{if(connectMess()){connectStatus="连接成功!";}}catch(Exceptione){connectStatus="连接失败!";}initComponents();try{showMess(index);}catch(Exceptione){}setMiddel();}booleanconnectMess()throwsException{//连接服务器try{Stringhost="";//默认Propertiesprops=newProperties();props.put("mail.smtp.host",host);props.put("mail.smtp.auth","true");//这样才能通过验证Sessionsession=Session.getDefaultInstance(props);Storestore=session.getStore("pop3");store.connect(host,ad,pa);Folderfolder=store.getFolder("INBOX");folder.open(Folder.READ_WRITE);message=folder.getMessages();returntrue;}catch(Exceptione){returnfalse;}}voidshowMess(inti)throwsException{//显示邮件内容,否则抛出from=message[i].getFrom()[0].toString();sender.setText(from);title=message[i].getSubject();messTitle.setText(title);SimpleDateFormatsimpleFormat=newSimpleDateFormat("yy-MM-ddHH:mm");sendDay=simpleFormat.format(message[i].getSentDate());day.setText(sendDay);if(message[i].isMimeType("multipart/*")){Multipartmp=(Multipart)message[i].getContent();intbodyNum=mp.getCount();for(intj=0;j<bodyNum;j++){if(mp.getBodyPart(j).isMimeType("text/plain")){content=(String)mp.getBodyPart(j).getContent();}if(mp.getBodyPart(j).isMimeType("text/html")){content="html邮件类型";}}}else{content="不支持邮件类型";}messContent.setText(content);}voidfreshMess()throwsException{//connectMess();showMess(index);}发送关键代码publicvoidsetProperties(){setFrom(getMessFrom().getText());setTo(getMessTo().getText());setUser(getFrom().substring(0,getFrom().indexOf("@")));setPassword(newString(getPass().getPassword()));setServer(getHost().getText());setProtocol(getMyProtocol().getText());setTitle(getMessTitle().getText());setContent(getMessContent().getText());}publicSessioncreateSession(){//建立会话Propertiesprops=newProperties();props.setProperty("tocol",getProtocol());//设置邮件协议为smtpprops.setProperty("mail.smtp.auth","true");//必须这样设置,以便能够向服务器提交认证信息Sessionsession=Session.getInstance(props);//注意这里只能用getInstance方法session.setDebug(true);returnsession;}publicMimeMessagecreateMessage(Sessionsession)throwsException{MimeMessagemessage=newMimeMessage(session);message.setFrom

温馨提示

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

评论

0/150

提交评论