基于javamail的邮件客户端设计_第1页
基于javamail的邮件客户端设计_第2页
基于javamail的邮件客户端设计_第3页
基于javamail的邮件客户端设计_第4页
基于javamail的邮件客户端设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

四川师范大学成都学院高级语言程序课程设计四川师范大学成都学院高级语言程序课程设计 邮件客户端的设计与实现 学生姓名学生姓名盛保杰盛保杰 学学 号号20141010532014101053 所在学院所在学院通信工程学院通信工程学院 专业名称专业名称通信工程通信工程 班班 级级20142014 级级 1 1 班班 指导教师指导教师石石 彬彬 成成 绩绩 四川师范大学成都学院四川师范大学成都学院 二二一六一六年年十二十二月月 II 课程设计任务书课程设计任务书 学生姓名学生姓名 盛保杰 学生学号学生学号2014101053 学生专业学生专业 通信工程 学生班级学生班级 2014 级 1 班 指导教师指导教师 石彬 职职 称称 老师 发题日期发题日期 20162016 年年 11 月月 12 日日 完成日期完成日期 20162016 年年 12 月月 18 日日 设计题目设计题目 邮件客户端设计与实现 设计目的:设计目的: 本次课程设计的目的在于学习 java 程序设计基本技术,学习电子邮件发送相 关技术,熟悉 java 开发环境以及 Swing 组件的相关应用,学习 javaMail 来开 发邮件客户端系统,熟悉项目开发的完整过程。 具体任务及要求:具体任务及要求: 学生应完成项目的需求分析、概要设计、详细设计等前期工作,在此基础上, 采用基于 Java 的程序设计技术完成邮件客户端的主界面设计,包括登录界面 和发送界面。采用基于 javamail 的程序设计技术完成邮件的发送,包括发送 文本和附件。最终完成课程设计报告书的攥写。 课程设计进度安排:课程设计进度安排: 序号序号内容安排内容安排时间时间 1 查阅相关资料了解 JavaMail 和 SMTP 协议 2016/11/18 2 编写客户端的程序 2016/11/28 3 书写文档和完善代码 2016/12/18 课程设计参考文献:课程设计参考文献: 11 谢希仁.计算机网络.第五版M.北京:电子工业出版社,2008.1 P75-P87,P110-P125 22 耿祥义,张跃平.Java 大学实用教程.第二版M.北京:电子工业出版社,2005.5 33 美Rogers Cadenhead. Java 编程入门经典.梅兴文译.第 4 版M.北京:人民邮电出 版 社,2007 44 王勇,代桂平.计算机网络课程设计M.北京:清华大学出版社,2009.6 指导教指导教 师签字师签字 院长审核院长审核 签字签字 四川师范大学成都学院课程设计报告 III 邮件客户端的设计与实现邮件客户端的设计与实现 内容内容摘要摘要: 随着互联网技术及网络办公化的发展,电子邮件成为人们主要的通信方式之 一。越来越多的人开始使用它。而且用它的人数势必会继续增加。虽然,现在已 经有很多的邮件收发软件例如著名的 FoxMail ,但是对于大多数的非专业的人来 说它还是有点难度。因此,我们所设计的基于 JavaMail 的邮件收发系统就利用 JavaMail 开发包的高级应用和 E-Mail 的相关协议开发出这个功能相对简单,但 是实用、方便、快捷的邮件收发系统。主要用于帮助用户将邮件发送给 SMTP 服 务器和从 POP3 邮件服务器读取用户的电子邮件。它集邮件的撰写、发送并且支 持附件的发送功能。虽然它没有 FoxMail 那么强大的功能,但是它容易掌握和使 用。整个系统功能流畅,从操作简便、界面友好、灵活实用的要求出发,使用户 之间的交流能够更加地方便和快捷。 本人结合 SMTP 以及 POP3 协议的实现原理、相关 JavaMail API 帮助文档以及 相关参考书,实现了一个工作在 PC 下的邮箱客户端程序,该程序基本上实现了 一个邮箱所对应的所有功能。 关键词关键词:客户端 JavaMAil SMTP 协议 IV DesignDesign AndAnd ImplementationImplementation OfOf MailMail ClientClient AbstractAbstract: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. KeywordsKeywords:Client JavaMAil Simple Message Transfer Protocol 四川师范大学成都学院课程设计报告 V 目目 录录 前 言 .VI 1 设计概述 VI 1 邮件发送协议与技术 VI 2.1 SMTP 协议简介及通讯模型 .VI 2.2 Java Mail API 介绍 VII 3 邮件发送客户端总体设计 IX 3.1 系统模块设置 .IX 3.2 类的功能设计 .IX 4 功能模块的实现 XI 4.1 文本的发送功能实现 .XI 4.2 主界面的实现 .XIII 4.3 附件发送功能实现 .XV 5 程序测试 .XVI 5.1 登录账号 XVI 5.2 发送文本邮件以及附件 XVI 6 设计小结 XVII 附 录 XIX 附录 1:LoginDialog 类部分代码.XIX 附录 2:MailSender 类部分代码XIX 附录 3:客户端样式 XXI 参考文献参考文献 XXII VI 邮件客户端的设计与实现邮件客户端的设计与实现 前前 言言 电子邮件(electronic mail,简称 E-mail,标志:,也被大家昵称为“伊 妹儿” )又称电子信箱、电子邮政,它是种用电子手段提供信息交换的通信方 式。 是 Internet 应用最广的服务:通过网络的电子邮件系统,用户可以用非常低廉 的价格(不管发送到哪里,都 只需负担电话费和网费即可) ,以非常快速的方式 (几秒钟之内可以发送到世界上任何你指 定的目的地) ,与世界上任何一个角 落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。 1 1 设计概述设计概述 本系统使用 Eclipse 作为开发工具,开发一个电子邮件发送端应用程序。系 统实现的功能主要有帐号设置,发送及添加附件,托盘程序等。 本例发送程序采取了与发送邮件服务器连接实现电子邮件的发送。用户在“收件 人邮箱”所对应的对话框中输入收件人的 Email 地址,并在账号设置窗口所对的 对话框中输入发信人的 Email 地址,设置好账号后,进入主对话框编辑信件的正 文(本程序还可以发送附件,直接选择路径,就可以发送附件) ,然后单击“发 送”按钮,便可完成电子邮件的发送。电子邮件发送成功,程序将弹出一个“发 送成功”的消息对话框;若电子邮件发送失败,程序将给出失败的相关信息。 1 1 邮件发送协议与技术邮件发送协议与技术 2.1 SMTP 协议简介及通讯模型 (SMTP:Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用 于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。它能够在 传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括 一个网络,几个网络或一个网络的子网。理解到传送系统(或 IPCE)不是一对一的 是很重要的。进程可能直接和其它进程通过已知的 IPCE 通信。邮件是一个应用 程序或进程间通信。邮件可以通过连接在不同 IPCE 上的进程跨网络进行邮件传 四川师范大学成都学院课程设计报告 VII 送。更特别的是,邮件可以通过不同网络上的主机接力式传送。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-12-1 SMTPSMTP 通信模型通信模型 2.2 Java Mail API 介绍 一般情况下,在 eclipse 中,电子邮件程序的编写是主要是利 Java jdk1.7 扩展包 JavaMailAPI 等及相关的 SMTP 等通信协议来实现的。随着现代软件业的 发展,java 提供了方便、简易、与服务器无关且稳固的电子邮件处理组件,使我 们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。 VIII 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、Folder Session 类:定义了基本的邮件会话。就像 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 的过程中, 四川师范大学成都学院课程设计报告 IX 极有可能需要用到用户名、密码或者 Authenticator 3 邮件发送客户端总体设计 3.1 系统模块设置 电子邮件客户端主要由以下三个模块构成:发送邮件模块、系统托盘模块、 账号设置模块。 点其功能模块如图 3-1 所示 图图 3-13-1 邮件组成模块邮件组成模块 邮件邮箱账号登录模块:登录邮箱,需要账号和密码。 邮件发送模块:发送邮件,并且可以添加附件。 3.2 类的功能设计 3.2.1 LoginDialog 类 public class LoginDialog extends JFrame implements ActionListener private 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 X 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(); /设置主题 四川师范大学成都学院课程设计报告 XI 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(); ); XII 4 功能模块的实现 4.1 文本的发送功能实现 邮件发的流程图 4-3: 图图 4-34-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“); 四川师范大学成都学院课程设计报告 XIII 图图 4-44-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 主界面的实现 XIV 本次设计中用到的界面都是用 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-14-1 账号登录账号登录 退出登录界面时不能直接点右上角的我做了相关的按钮 btnNewButton_logout 和提示信息方便用户使用,以防用户不小心点到了关闭按 钮。具体如图 4-2 所示。 四川师范大学成都学院课程设计报告 XV 图图 4-24-2 退出邮箱退出邮箱 4.3 附件发送功能实现 添加附件流程图如图 4-5,当用户点击“添加附加”按钮时,会弹出图形界 面,方便用户选择附件路径,附件与邮件一起发送。 图图 4-54-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“ 文件选 择器对话框 XVI 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-15-1 程序测试之登录账号程序测试之登录账号 5.2 发送文本邮件以及附件 登录成功后在收件人地址框输入收件人地址“hj_”输入主 题“测试邮件,收到勿回!” ,正文中写上一片文章,然后点添加附件“测试文 件.png” (如图 5-2.1 ,5-2.2 所示) ,最后点击发送返回“发送成功”的提示信 息。测试完成! 四川师范大学成都学院课程设计报告 XVII 图图 5-2.15-2.1 选择附件选择附件 图图 5-2.25-2.2 发送成功!发送成功! 6 设计小结 在课程设计即将完成之际,我想向曾经给我帮助的石彬老师和一起讨论的同 学表示衷心的感谢。本次设计过程中遇到了很多程序上的问题, 在老师不厌其 烦地指导和自己不断地思 考中才得以解决,然后是不停地通宵研究,编译,拿 出了刻苦的精神后,问题也就迎刃而解 了。在这两个一月的努力中,我终于设 计出一个可以发送文本图片视频的电子邮件客户端,并且调试通过,最后整理出 设计报告。通过编写电子邮件的客户端,我知道了 java 除了本来的许多包和类, 还有需要使用特殊作用的扩展包和类,如本系统用到的 javamail 包等,其中有一 个 chooser 类对发送附件时怎么打开文件夹的使用让我印象十分深刻。在完成过 中我们最最开始用 Socket 套接字写的有问题,在老师的指导下我找到了错误并解 决了发送邮件时出现无法登陆邮件服务器错误,通过网上的资源才知道是因为我 发的是 163 邮箱,而本身 163 邮箱的 SMTP 服务器没打开还有账号密码登录时, XVIII 要使用授权码而不是我们平时所用的密码。目前系统还不够完整,还存在着很多 的不足和不完善的地方。不过我相信随着以后学的专业知识越来越多,我会完善 这个系统的。最后衷心感谢在此次课程设计中。石彬老师和同学的帮助。 四川师范大学成都学院课程设计报告 XIX 附附 录录 附录 1:LoginDialog 类部分代码 public class LoginDialog extends JFrame implements ActionListener private 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“,““); /收件人的地 XX 址 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.setSubject(textField_1.getTex

温馨提示

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

评论

0/150

提交评论