




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川师范大学成都学院高级语言程序课程设计邮件客户端的设计与实现 学生姓名学 号所在学院通信工程学院专业名称通信工程班 级2014级1班指导教师成 绩 四川师范大学成都学院二一六年十二月四川师范大学成都学院课程设计报告课程设计任务书学生姓名学生学号20141学生专业通信工程学生班级2014级1班指导教师职 称老师发题日期 2016年11月12日完成日期 2016年12月18日设计题目邮件客户端设计与实现设计目的:本次课程设计的目的在于学习java程序设计基本技术,学习电子邮件发送相关技术,熟悉java开发环境以及Swing组件的相关应用,学习javaMail来开发邮件客户端系统,熟悉项目开发的完整过程。具体任务及要求:学生应完成项目的需求分析、概要设计、详细设计等前期工作,在此基础上,采用基于Java的程序设计技术完成邮件客户端的主界面设计,包括登录界面和发送界面。采用基于javamail的程序设计技术完成邮件的发送,包括发送文本和附件。最终完成课程设计报告书的攥写。课程设计进度安排:序号内容安排时间1查阅相关资料了解JavaMail和SMTP协议2016/11/182编写客户端的程序2016/11/283书写文档和完善代码2016/12/18课程设计参考文献:1 谢希仁.计算机网络.第五版M.北京:电子工业出版社,2008.1 P75-P87,P110-P1252 耿祥义,张跃平.Java 大学实用教程.第二版M.北京:电子工业出版社,2005.53 美Rogers Cadenhead. Java 编程入门经典.梅兴文译.第 4 版M.北京:人民邮电出版 社,20074 王勇,代桂平.计算机网络课程设计M.北京:清华大学出版社,2009.6指导教师签字院长审核签字邮件客户端的设计与实现内容摘要:随着互联网技术及网络办公化的发展,电子邮件成为人们主要的通信方式之一。越来越多的人开始使用它。而且用它的人数势必会继续增加。虽然,现在已经有很多的邮件收发软件例如著名的FoxMail ,但是对于大多数的非专业的人来说它还是有点难度。因此,我们所设计的基于JavaMail的邮件收发系统就利用JavaMail开发包的高级应用和E-Mail的相关协议开发出这个功能相对简单,但是实用、方便、快捷的邮件收发系统。主要用于帮助用户将邮件发送给SMTP服务器和从POP3邮件服务器读取用户的电子邮件。它集邮件的撰写、发送并且支持附件的发送功能。虽然它没有FoxMail那么强大的功能,但是它容易掌握和使用。整个系统功能流畅,从操作简便、界面友好、灵活实用的要求出发,使用户之间的交流能够更加地方便和快捷。 本人结合SMTP以及POP3协议的实现原理、相关JavaMail API帮助文档以及相关参考书,实现了一个工作在PC下的邮箱客户端程序,该程序基本上实现了一个邮箱所对应的所有功能。关键词:客户端 JavaMAil SMTP协议Design And Implementation Of Mail ClientAbstract:With the development of Internet technology and network office, e-mail has become one of the main modes of communication. And the number of people using it is bound to continue to increase. Although there are a lot of E-mail software such as the famous FoxMail, but for most non professional people it is still a little difficult. Therefore, the JavaMail mail system on the use of advanced applications and E-Mail JavaMail development package related agreements to develop the relatively simple functions based on our design, but practical, convenient and fast mail system. Mainly used to help users send mail to the SMTP server and read the users e-mail from the POP3 mail server. It sets the mail to write, send and support attachments send function. Although it does not have FoxMail so powerful features, but it is easy to grasp and use. The whole system functions smoothly, from simple operation, friendly interface, flexible and practical requirements, so that the communication between users can be more convenient and convenient.So I combined the SMTP and POP3 protocol principle, JavaMail API help documentation and reference books, can work under the PC mail client program, the program basically realized all the functions corresponding to a mailbox.Keywords:Client JavaMAil Simple Message Transfer Protocol目 录前 言VI1 设计概述VI1 邮件发送协议与技术VI2.1 SMTP协议简介及通讯模型VI2.2 Java Mail API介绍VII3 邮件发送客户端总体设计IX3.1 系统模块设置IX3.2 类的功能设计IX4 功能模块的实现XI4.1 文本的发送功能实现XI4.2 主界面的实现XIII4.3 附件发送功能实现XV5 程序测试XVI5.1 登录账号XVI5.2 发送文本邮件以及附件XVI6 设计小结XVII附 录XIX附录1:LoginDialog类部分代码XIX附录2:MailSender类部分代码XIX附录3:客户端样式XXI参考文献XXII邮件客户端的设计与实现前 言电子邮件(electronic mail,简称 E-mail,标志:,也被大家昵称为“伊妹儿”)又称电子信箱、电子邮政,它是种用电子手段提供信息交换的通信方式。是Internet应用最广的服务:通过网络的电子邮件系统,用户可以用非常低廉的价格(不管发送到哪里,都 只需负担电话费和网费即可),以非常快速的方式(几秒钟之内可以发送到世界上任何你指 定的目的地) ,与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。1 设计概述本系统使用Eclipse作为开发工具,开发一个电子邮件发送端应用程序。系统实现的功能主要有帐号设置,发送及添加附件,托盘程序等。 本例发送程序采取了与发送邮件服务器连接实现电子邮件的发送。用户在“收件人邮箱”所对应的对话框中输入收件人的Email地址,并在账号设置窗口所对的对话框中输入发信人的Email地址,设置好账号后,进入主对话框编辑信件的正文(本程序还可以发送附件,直接选择路径,就可以发送附件),然后单击“发送”按钮,便可完成电子邮件的发送。电子邮件发送成功,程序将弹出一个“发送成功”的消息对话框;若电子邮件发送失败,程序将给出失败的相关信息。1 邮件发送协议与技术2.1 SMTP协议简介及通讯模型(SMTP:Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。SMTP协议属于TCPIP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把Email寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件。 SMTP 是一种提供可靠且有效电子邮件传输的协议。SMTP是建模在 FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。 SMTP 独立于特定的传输子系统,而且仅要求一条可以保证传送数据单元顺序的通道且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的TCP/IP网络上TCP可相互访问的主机,及其它 LAN/WAN 中的主机利用非TCP传输层协议组成。使用 SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳 IP 地址。SMTP在传输文件过程中使用25号端口。可大致用下面的图2-1来表示。图2-1 SMTP通信模型2.2 Java Mail API介绍一般情况下,在eclipse中,电子邮件程序的编写是主要是利Java jdk1.7扩展包JavaMailAPI等及相关的SMTP等通信协议来实现的。随着现代软件业的发展,java提供了方便、简易、与服务器无关且稳固的电子邮件处理组件,使我们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。JavaMail便是一个很好的电子邮件程序开发扩展组件。 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。 JavaMail核心类:Session、Message、Address、Authenticator、Transport、Store、FolderSession类:定义了基本的邮件会话。就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。 Message类:当我们建立了Session对象后,便可以被发送的构造信息体了。在这里SUN提供了Message类型来帮助开发者完成这项工作。由于Message是一个抽象类,大多数情况下,我们使用ernet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。Address类:到这里,我们已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。像Message一样,Address类也是一个抽象类,所以我们将使用ernet.InternetAddress这个子类。 Authenticator类:像类那样,JavaMail API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。 Transport类:在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:Transport.send(message); Store和Folder类:接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator3 邮件发送客户端总体设计3.1 系统模块设置电子邮件客户端主要由以下三个模块构成:发送邮件模块、系统托盘模块、账号设置模块。 点其功能模块如图3-1所示图3-1 邮件组成模块l 邮件邮箱账号登录模块:登录邮箱,需要账号和密码。l 邮件发送模块:发送邮件,并且可以添加附件。3.2 类的功能设计3.2.1 LoginDialog类public class LoginDialog extends JFrame implements ActionListenerprivate JPanel contentPane;private JTextField textField_AccountNumber; /账号public static String AN; /保存账号public static String psd; /保存密码private JPasswordField textField_password;JButton btnNewButton_Login;JButton btnNewButton_logout;public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try LoginDialog frame = new LoginDialog();frame.setVisible(true); catch (Exception e) e.printStackTrace(););3.2.2 MailSender类btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(JOptionPane.OK_OPTION = JOptionPane.showConfirmDialog(null, 确认发送邮件吗?,邮件,JOptionPane.YES_NO_CANCEL_OPTION)LoginDialog LD = new LoginDialog();Properties prop = new Properties();prop.put(tocol,smtp);prop.put(mail.smtp.host,); prop.put(mail.smtp.port,25); prop.put(mail.smtp.starttls.enable, true);prop.put(mail.smtp.auth, true);/创建一个邮件会话Session session = Session.getDefaultInstance(prop);/创建一个邮件对象MimeMessage message = new MimeMessage(session);/设置邮件参数try message.setSubject(textField_1.getText().trim();/设置主题message.setSentDate(new Date();/设置时间message.setFrom(new InternetAddress(LD.AN);message.setRecipient(RecipientType.TO, new InternetAddress(textField.getText().trim();/收件人message.setText(textArea.getText().trim();/设置内容textField_2.setText(LD.AN); /显示发件人/*一整封邮件*/if (hasattch) Multipart multi = new MimeMultipart(); MimeBodyPart mbp1 = new MimeBodyPart(); /附件 MimeBodyPart content = new MimeBodyPart(); /内容 content.setText(textArea.getText().trim(); FileDataSource fds = new FileDataSource(attachPath); mbp1.setDataHandler(new DataHandler(fds); mbp1.setFileName(Route); multi.addBodyPart(mbp1); multi.addBodyPart(content); message.setContent(multi);message.saveChanges();/保存发送 提示发送成功Transport trans = session.getTransport();trans.connect(LD.AN,LD.psd); trans.sendMessage(message, message.getAllRecipients();JOptionPane.showMessageDialog(null, 发送成功!);trans.close(); catch (MessagingException e1) JOptionPane.showMessageDialog(null,发送失败!请检查邮件格式是否正确!);e1.printStackTrace(););4 功能模块的实现4.1 文本的发送功能实现邮件发的流程图4-3:图4-3邮件发送流程图 获取收件人账号,并设置SMTP邮件服务器(程序会检查账号输入的合法性,并给出提示如图4-4)相关代码如下Properties prop = new Properties();prop.put(mail.smtp.host,); /收件人的地址prop.put(mail.smtp.port,25); /25号是SMTP标准服务端口prop.put(mail.smtp.starttls.enable, true);prop.put(mail.smtp.auth, true);图4-4检查账号并给出提示信息 获取账号设置界面用户输入的账号和密码并传入服务器哦,然后建一封邮件。关键代码如下:/创建一个邮件会话Sessionsession = Session.getDefaultInstance(prop);/创建一个邮件对象MimeMessage message = new MimeMessage(session);/设置邮件参数try message.setSubject(textField_1.getText().trim(); /设置主题message.setSentDate(new Date();/设置时间message.setFrom(new InternetAddress(LD.AN);/发件人message.setRecipient(RecipientType.TO, new InternetAddress(textField.getText().trim();/收件人message.setText(textArea.getText().trim();/设置内容textField_2.setText(LD.AN); /显示发件人message.saveChanges(); Transport trans = session.getTransport();trans.connect(LD.AN,LD.psd);trans.sendMessage(message, message.getAllRecipients();JOptionPane.showMessageDialog(null, 发送成功!);trans.close();4.2 主界面的实现本次设计中用到的界面都是用JFrame图形化界面(design)下画出来的,java图形界面是程序人机交互的重要组成部分,不仅实现了用户键盘鼠标的操作,同时也可以移动和关闭对话框。操作起来特别方便,具体操作如下: 首先创建MailSender类并继承JFrame类。 为了不让登录窗口随意拖动并把位置固定在屏幕中心我们采用了如下操作代码:setTitle(账号登录);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/居中Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); int w = 335;int h = 194;int x = (screen.width-w)/2;int y= (screen.height-h)/2;setBounds(x, y, w, h); 处理密码不可见的问题是我们采用了不是JTextField而是textField_password这个组件具体效果如图4-1所示。图4-1账号登录 退出登录界面时不能直接点右上角的我做了相关的按钮btnNewButton_logout和提示信息方便用户使用,以防用户不小心点到了关闭按钮。具体如图4-2所示。图4-2退出邮箱4.3 附件发送功能实现添加附件流程图如图4-5,当用户点击“添加附加”按钮时,会弹出图形界面,方便用户选择附件路径,附件与邮件一起发送。图4-5添加附件这里用到了一个 JFileChoose类新建对象chooser,然后调用对象的方法。相关代码如下:hasattch = true;/点击了添加附件JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setDialogTitle(打开文件夹);chooser.setCurrentDirectory( new File(E:/);chooser.setMultiSelectionEnabled(true); 出一个 Open File 文件选择器对话框int returnVal = chooser.showOpenDialog(null);if(returnVal = JFileChooser.APPROVE_OPTION) attachPath = chooser.getSelectedFile().getAbsolutePath();/文件路径 try Route = MimeUtility.encodeText(chooser.getSelectedFile().getName(); /处理文件名字显示乱码catch(UnsupportedEncodingException e1) e1.printStackTrace(); lblNewLabel_Enclosure.setText(chooser.getSelectedFile().getName(););5 程序测试5.1 登录账号登录账号setting_1206163.com,在授权码中输入对应的授权码(授权码不是登陆密码而是为第三方客户端后者协议准备的密码)点击登录按钮。如下图5-1所示:图5-1 程序测试之登录账号5.2 发送文本邮件以及附件登录成功后在收件人地址框输入收件人地址“hj_”输入主题“测试邮件,收到勿回!”,正文中写上一片文章,然后点添加附件“测试文件.png”(如图5-2.1 ,5-2.2所示),最后点击发送返回“发送成功”的提示信息。测试完成!图5-2.1选择附件图5-2.2 发送成功!6 设计小结在课程设计即将完成之际,我想向曾经给我帮助的石彬老师和一起讨论的同学表示衷心的感谢。本次设计过程中遇到了很多程序上的问题, 在老师不厌其烦地指导和自己不断地思 考中才得以解决,然后是不停地通宵研究,编译,拿出了刻苦的精神后,问题也就迎刃而解 了。在这两个一月的努力中,我终于设计出一个可以发送文本图片视频的电子邮件客户端,并且调试通过,最后整理出设计报告。通过编写电子邮件的客户端,我知道了java除了本来的许多包和类,还有需要使用特殊作用的扩展包和类,如本系统用到的javamail包等,其中有一个chooser类对发送附件时怎么打开文件夹的使用让我印象十分深刻。在完成过中我们最最开始用Socket套接字写的有问题,在老师的指导下我找到了错误并解决了发送邮件时出现无法登陆邮件服务器错误,通过网上的资源才知道是因为我发的是163邮箱,而本身163邮箱的SMTP服务器没打开还有账号密码登录时,要使用授权码而不是我们平时所用的密码。目前系统还不够完整,还存在着很多的不足和不完善的地方。不过我相信随着以后学的专业知识越来越多,我会完善这个系统的。最后衷心感谢在此次课程设计中。石彬老师和同学的帮助。附 录附录1:LoginDialog类部分代码public class LoginDialog extends JFrame implements ActionListenerprivate JPanel contentPane;private JTextField textField_AccountNumber; /账号public static String AN; /保存账号public static String psd; /保存密码private JPasswordField textField_password;JButton btnNewButton_Login;JButton btnNewButton_logout;/* * Launch the application. */public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try LoginDialog frame = new LoginDialog();frame.setVisible(true); catch (Exception e) e.printStackTrace(););附录2:MailSender类部分代码btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(JOptionPane.OK_OPTION = JOptionPane.showConfirmDialog(null, 确认发送邮件吗?,邮件,JOptionPane.YES_NO_CANCEL_OPTION)LoginDialog LD = new LoginDialog();Properties prop = new Properties();prop.put(tocol,smtp);prop.put(mail.smtp.host,); /收件人的地址prop.put(mail.smtp.port,25); /25号是SMTP标准服务端口prop.put(mail.smtp.starttls.enable, true);prop.put(mail.smtp.auth, true);/创建一个邮件会话Session session = Session.getDefaultInstance(prop);/创建一个邮件对象MimeMessage message = new MimeMessage(session);/设置邮件参数try message.setSub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西加油罐采购合同范本
- 锡山区餐饮投资合同范本
- 物业空调安装免责协议书
- 灌溉水渠修复协议书范本
- 用工程货款买房合同范本
- 法律欠款回收协议书范本
- 腻子工工程分包合同范本
- 父母卖房给子女合同范本
- 机械厂临时工合同协议书
- 砖窑摊位转让协议书模板
- 京沪高铁某段现浇箱梁施工方案
- 企业用工风险劳动合同风险防控培训课件
- GB/T 5053.3-2006道路车辆牵引车与挂车之间电连接器定义、试验方法和要求
- 加工中心个人简历
- 最新《工会基础知识》试题库及答案1000题【完美打印版】
- 高周波熔接机操作指导书
- 产钳助产术考核标准
- T∕CCTA 30101-2021 喷气涡流纺棉本色纱
- 上海石化挤出机组交流材料概要课件
- 医院关于成立食堂食品安全领导小组的通知
- 《村卫生室管理办法(试行)》课件(PPT 49页)
评论
0/150
提交评论