




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络 课程设计报告 题 目 简单邮件客户端设计 学 院 计算机科学与工程学院 专 业 软件工程 2012 年 3 月 10 日 目录目录 简单邮件客户端设计说明书简单邮件客户端设计说明书 1 一 前言 1 二 需求分析 1 2 1 功能需求 1 2 2 开发环境工具 1 2 3 所需要的知识 2 三 概要设计 2 3 1 邮件系统各功能概述 2 3 1 1 JavaMail 简介 2 3 1 2 设计目标 3 3 1 3 系统功能概述 3 3 2 邮件管理系统总体设计方案 4 3 2 1 系统体系结构 4 3 2 2 功能模块 4 3 3 系统开发的技术难点和解决方案 5 3 3 1 MIME Messsage 的解析 5 3 3 2 邮件发送 6 3 3 3 系统性能问题 6 3 4 系统特点 7 3 5 系统具体设计 7 3 6 关键代码 11 3 7 结束语 20 简单邮件客户端设计说明书简单邮件客户端设计说明书 一一 前言前言 随着互联网技术及网络办公化的发展 电子邮件成为人们主要的通信方式之一 越来 越多的人开始使用它 而且用它的人数势必会继续增加 虽然 现在已经有很多的邮件收 发软件例如著名的 FoxMail 但是对于大多数的非专业的人来说它还是有点难度 因此 我们所设计的基于 JavaMail 的邮件收发系统就利用 JavaMail 开发包的高级应用和 E Mail 的相关协议开发出这个功能相对简单 但是实用 方便 快捷的邮件收发系统 主要用于 帮助用户将邮件发送给 SMTP 服务器和从 POP3 邮件服务器读取用户的电子邮件 它集邮件 的撰写 发送和接收功能与一体 并且支持附件的发送和接收以及其它一些附加功能的实 现 虽然它没有 FoxMail 那么强大的功能 但是它容易掌握和使用 整个系统功能流畅 从操作简便 界面友好 灵活实用的要求出发 使用户之间的交流能够更加地方便和快捷 本人结合 SMTP 以及 POP3 协议的实现原理 相关 JavaMail API 帮助文档以及相关参考 书 实现了一个工作在 PC 下的邮箱客户端程序 该程序基本上实现了一个邮箱所对应的所 有功能 二二 需求分析需求分析 2 1 功能需求功能需求 1 开发一个 JavaMail API 下的邮箱客户端 实现邮件的发送 接收以及 2 通过输入服务器地址 用户名 密码 可以实现远程 FTP 服务器登录 3 提供本地文件和文件夹的上传功能 对 FTP 主机文件进行下载和删除 4 提供对本地目录的读取与返回 能够列出文件和文件夹 5 FTP 提供两种工作模式的选择 Port 模式 主动模式 和 Passive 模式 被动模 式 2 2 开发环境工具开发环境工具 1 使用编程工具 Eclipse 2 使用的语言 Java 3 使用的开发包 javamail 1 4 版 下载地址为 downloads eeplat 419426 html javamail 1 4 4 oth JPR 4 开发平台 Mac OS X 10 6 8 2 3 所需要的知识所需要的知识 1 计算机网络的基本知识 2 了解 SMTP 协议以及 POP3 协议基本实现原理 3 使用 Windows 下的 Eclipse 编译器的使用方法 4 熟悉邮件的各项功能 三三 概要设计概要设计 3 1 邮件系统各功能概述邮件系统各功能概述 3 1 1 JavaMail 简介简介 JavaMail API 是 Java EE 的一部分 是 Java SE 的可选组件 该组件提供了一个平台 无关 协议独立的框架 预置了一些最常用的邮件传送协议的实现方法 通过一组 API 来 模拟邮件系统 提供 Email 的发送和接收服务 它借鉴了 IMAP MAPI CMC 等消息系统 API 的设计 采用面向对象的思想将接 2008 年 4 月 18 日收到接口与实现相分离 支持存 取方式 消息格式 消息传送协议不同的邮件消息系统 可以简便的为应用程序增加 Email 支持 广泛应用于构件邮件和消息应用系统 JavaMail API 封装了电子邮件功能 中 邮件对象 发送 身份认证 接收等功能 其核心类有 Session Authenticator Address Message Transport Store Folder 等 其中 Session 是邮件操作的接口 用于 建立了基本的邮件会话 Authenticator 类提供访问邮件服务器所需的认证信息 Message 描述基本的邮件消息 是收发邮件的操作单位 Transport 是发送邮件时所用的协议 通 常是 SMTP Store 模拟了消息数据库及其内部存储消息的目录的访问协议 Folder 用于描 述消息数据库中的目录结构 一个 Session 会有多个 Trans port 每个 Store 包含一系列的 Folder 和 Message 每个 Folder 又包含一系列的 Folder 和 Message 借助这些类 就可以构建各种典型的邮件应用 JavaMail 的最新实现 是 1 4 版本 可以支持 POP3 IMAP4 SMTP 协议 由于 JavaMail 还需要 JavaBeans Activation Framework JAF 框架的支持 3 1 2 设计目标设计目标 公用邮箱是和外单位交互的主要渠道 用户获取和提交一些重要数据和文件 也是与 本单位其它部门进行业务的信息交换的重要渠道 公用邮箱不仅有 13 常办公相关的各类邮 件 还有很多其它种类的邮件 此外 一些与办公相关的邮件还会发送到工作人员的个人 邮箱中 工作人员使用 Fox mail 或其它邮件客户端将公用邮箱中的邮件从服务器下载至 本地 然后进行处理 这样的工作模式存在的缺点有 邮箱中邮件太多 很难找到与工作 相关的邮件 工作效率低下 存在潜在处理风险 工作人员都利用邮件客户端存储和处理 邮件 造成资源浪费 且无法及时得悉邮件的处理情况 难以落实责任 难以对办公相关 的邮件进行统一归档和备份 并提供检索 统计 数据分析等服务 邮件帐号分散管理 带来潜在的信息安全隐患 本系统的设计旨在解决这些问题 为工作人员提供一个基于 Web 的简洁 易用 安全可靠 功能完备的办公邮件处理平台 3 1 3 系统功能概述系统功能概述 1 1 邮件自动获取与过滤 邮件自动获取与过滤 系统每天实时或者在固定的时间 统一收集多个外部邮件服务上多个邮件帐号的新邮 件后汇总在一起 并根据发送地址和过滤规则对邮件进行过滤 提取服务器上的有效邮件 通过人工干预或者自动化的机制将邮件基本信息存储在数据库中 附件存人文件服务器 对完全重复的邮件通过比对后只保留一份 2 2 邮件分类 邮件分类 对过滤后的有效邮件 按照制定好的分类规则 根据邮件主题 发件人信息 附件属 性及关键词对邮件及其附件进行归类 并提供自动归类和人工干预后确定邮件类别两种灵 活的类别确认机制 3 3 邮件提醒与处理邮件提醒与处理 在邮件归类后 对于新邮件 系统通过与短信发送平台的接口 将发件人 发送时间 主题 优先级等信息以短信的形式发送给相应邮件类别的处理者 邮件处理者通过网页登 陆系统 可以像使用 Web 邮箱那样 方便快捷的查阅和处理只属于自己需要处理的那些邮 件 4 4 邮件管理邮件管理 系统向用户提供邮件检索 删除 调整分类等功能 可以统一直观的对 信息过滤情 况 信息分类跟踪 处理情况 审阅结果 处理者信息 反馈情 况等进行展示 还可以对邮件进行统计 生成月度及年度邮件统计报表 普通用户只 能管理与自己工作相关的邮件 系统管理员可以管理所有邮件 5 5 邮件帐号设定及过滤和分类规则定义 邮件帐号设定及过滤和分类规则定义 系统管理员可根据需求设定多个邮件帐号 将不同邮箱的邮件汇总在一起 过滤规则 是系统选择接收邮件的依据 目前状况下 对邮件地址和发送时间进行过滤已能满足需求 分类规则是对邮件进行分类的依据 对每个公司或单位 管理员可以根据业务类型定义邮 件及附件类别 然后指定该类别邮件的关键词 特征及处理者 3 2 邮件管理系统总体设计方案邮件管理系统总体设计方案 3 2 1 系统体系结构系统体系结构 系统基于 B S 结构 采用 MVC Mode1 View Controller 模式 体系结构 系统采用三层结构 第一层是客户端层 用户通过 IE Firefox 等浏览器与系统交互 发起浏览 检索 处理邮件 系统配置与管理等请求 并展示处理结果 第二层为服务器层 可以分为两个功能相对独立的部分 一个是 Web 服务器 用于响 应和处理客户端请求 通过请求处理程序与后台数据库交互 返回处理结果给浏览器 一 个是邮件处理部分 通过 JavaMail API 与邮件服务器交互 发送和接收邮件 并对有效邮 件进行解析与分类 将结果存放在数据库和文件系统中 然后借助短信发送平台的接口通 知用户处理邮件 第三层为数据层 包括 用于存储系统信息 邮件信息的数据库服务器 存 储邮件附件的文件服务器 为了提高系统可扩展性和满足复杂应用逻辑的需求 在系 统第二层的 Web 应用中 是 MVC 模式的一种实现 3 2 2 功能模块功能模块 系统涵盖了运行中心日常邮件管理与维护的所有功能 共分为六个模块 邮件获取模 块 邮件发送模块 邮件分类模块 邮件处理模块 邮件管理模块 联系人模块 这些模 块功能相对独立 具有高内聚 低耦合的特点 每个模块都有定义良好的接口 可以扩展 和增加复杂的应用逻辑 其中 邮件发送模块可以发送文字 图片 附件 并可以同时发送给不同的邮箱 其 中可编辑发送文字的大小格式颜色等 邮件获取模块可以获取邮件 在收件箱可以看到邮件列表 刷新可见新邮件 邮件分类模块是将邮件客户端分为发信箱 收信箱 已发送 已删除 邮件管理模块是可对邮件删除 回复 彻底删除 对已删除的邮件可以恢复 刷新收 信箱 邮件处理模块是对邮件的查看 下载附件 回复 联系人模块是可以添加 删除联系人 发邮件的时候可以直接点击已添加过的联系人 进行发送 3 3 系统开发的技术难点和解决方案系统开发的技术难点和解决方案 3 3 1 MIME Messsage 的解析的解析 MIME Multipurpose Internet Mail Extension 协议是目前应用最广泛的邮件协议 用于定义邮件的格式 它可以包含文本 图像 音频 视频以及其它 应用程序专用的数据 邮件的解析实际上可以就是解析 MIME 消息的过程 是邮件过滤 分类 管理等工作的前提 通常情况下 一个 MIME 消息由消息头 Headers 和消息体 Content 组成 消息头包括 发送者 接收者 发送时间 主题 优先级 邮件内容类型 MIME 版本号等信息 消息体为邮件的内容 它可以为简单的文本 也可以是包含多个分段 Part 的多重消息 Muhipart 而其中每个分段的消息都有自己的消息头和消息体 对于 不带附件的简单邮件 其消息体的内容类型是纯文本 text plain 或者 text html 等 对 于带附件或者包含多种 内容格式的邮件 其消息体为 muhipart 类型 通常为 muhipart mixed muhipart related 或 multipart alternative 比如 邮件正文 附件 HTML 信件等 因此 邮件消息的解析过程实际上是一个后序周游整棵 MIME 消息树的过程 消息的解析需要递归访问消息中的每个消息体 也就是树的叶结点 从中获取相关信息 并生成一个邮件对象 用于随后的邮件分类和写人数据库操作 在解析时 需要将发送者 接收者 主题 发送时间 正文等有用信息存储在定义好的邮件对象中 将附件和 HTML 格 式的信件存储在文件系统 并将附件的文件名和文件路径存储在邮件对象中 3 3 2 邮件发送邮件发送 Email 的发送实际上就是构造一个 MIME 消息的过程 JavaMail API 提供了相应的接口 用于构造一个邮件消息 但是相对较复杂 本系统采用 A pache 的开源工具包 Commons Email 来实现邮件发送 Commons Email 构建于 JavaMail API 上 对 JavaMail 进行了再封 装 提供了极为简便的借口用于通过 Java 程序发送 Email 它提供的主要类有 SimpleEmail 用于发送简单的文本类型 Email MultiPartEmail 用于发送带附件的 Email HtmlEmail 用于发送 Html 格式的邮件 EmailAttachment 描述 Email 的附件 借助 Commons Email 工具包发送一个简单 Email 只需要创建 SimpleEmail 对象 设置 SMTP 服务器 认证信息 发送者 接收者 主题 正文 然后发送即可 要发送一个带附 件的邮件 只需要构造一个 MuhiPartEmail 对象 设置和简单 Email 一样的属性 然后构 造附件对象并将之附加在 MuhiPartEmail 中即可 不难看出采用了 Commons Email 工具包 后 邮件的发送十分简洁 只需要构建相应的附件和邮件内容即可 而且工具包还支持直 接用网络上的文件作为附件内容 3 3 3 系统性能问题系统性能问题 邮件服务器上可能会有很多封邮件 如何判断一封邮件是否被处理过 并对未处理的 邮件消息进行过滤与分类是系统的一个性能瓶颈 系统基于 Web 技术构建客户端 而 Web 应用程序不可避免的会有频繁的数据库操作 建立数据库连接是相当耗费资源和时间的操 作 在 JSP 应用中若直接采用 JDBC 接口访问数据库 必然会频繁建立和关闭数据库连接 从而导致服务器性能下降 为保证系统高效运行 采用如下的策略来提高整体性能 1 1 多线程技术 多线程技术 每个 Email 消息的处理是相对独立的过程 因而采用多线程技术同时处理多封邮件是 提高性能的最简单可行的做法 系统共使用 8 个线程处理邮件消息 根据邮件消息的总数 就能计算出每个线程所需要处理的消息数为 N M 8 表示取上整 其中第 k 个线程 处理邮件消息队列中第 8i k i 0 1 N 一 1 个消息 以倒序的方式处理可以使得消 息相对均匀的分配给处理线程 并保证有效消息先被处理 2 2 灵活高效的过滤机制灵活高效的过滤机制 每个 Email 都会对应一个固定的 Message ID 和 SentDate 在解析时很容易获取 系 统会对每个帐号设定邮件开始接收 13 期 ReceiveStartDate 在处理 E mail 消息时 先 根据 SentDate 来判断 若在该 13 期前 则不予以处理 每次接收完成后 更新 ReceiveStartDate 至当前 13 期 为了避免重新设定 Re ceiveStartDate 或者重新执行接 收任务时 对已经处理过的有效邮件重复处理 系统提供两种机制 一种是不在服务器上 保留副本 这样每次获取的必然是新邮件 一种是保留副本 但利用 Property 文件记录每 个符合要求的消息的处理情况 以便快速判断邮件消息是否被处理过 3 3 采用数据库连接池技术采用数据库连接池技术 连接池会在初始化时保持一定数量的数据库连接 应用程序在操作数据库时 从连接 池中获取一个连接 完成操作后释放连接 这样大大提高了系统性能 保存邮件信息至数 据库时 系统采用 Apache DBCP Component 来建立数据库连接池 在系统的 Web 应用部分 通过配置 Tomcat 数据源来建立数据库连接池 3 4 系统特点系统特点 系统借助 JavaMail API 实现了一个简单的基于 Web 的邮件客户端 可以将不同邮件服 务器的有效邮件聚合在一起进行统一归档管理 并提供统一 友好的界面以方便相关人员 处理邮件 系统在自动化的基础上提供选择性干预的机制 以应对一些特殊情况 系统使 用 Java 语言开发 基于 B S 结构 采用 MVC 模式 系统层次清晰 结构合理 在后台处 理程序和应用逻辑的设计中 采用面向对象的设计方法和分层设计思想 将抽象和实现相 分离 具有很好的可扩展性好 为了提高系统性能 采用了多线程技术和连接池技术 系 统执行效率高 系统支持自定义简单的过滤规则 邮件类别 分类规则 并能很容易的进 行扩展以支持复杂的自动化分类技术 3 5 系统具体设计系统具体设计 登陆界面 功能目录 发送邮件 邮件已发送 对方收到邮件并回复邮件后 刷新收信箱 收信箱列表 收到对方回复的新邮件 读取邮件内容 已 发送邮 件列表 对邮件的操作 回复邮件 3 6 关键代码关键代码 LoginAction javaLoginAction java 用于验证验证登陆陆是否成功 package action import mailutil GetMail import mailutil SendAttachMail import utils EditorUtils public class LoginAction private String POP3Host POP3 服务务器 private String SMTPHost SMTP 服务务器 private String user 登录录服务务器的帐帐号 private String password 登录录服务务器的密码码 private GetMail getMail null private SendAttachMail sendMail null 三个参数的构造方法 public LoginAction String sMTPHost String pOP3Host String user String password super POP3Host pOP3Host SMTPHost sMTPHost this user user this password password 实实例化收邮邮件对对象 getMail GetMail getMailInstantiate getMail setPOP3Host POP3Host getMail setUser user getMail setPassword password 实实例化发邮发邮件件对对象 sendMail SendAttachMail getSendMailInstantiate sendMail setSMTPHost SMTPHost sendMail setUser user sendMail setPassword password 判断登陆陆是否成功 public boolean isLogin boolean isLogin false 判断用户户名是否为为空 if checkUser try sendMail connect 连连接发发件服务务器 只能通过连过连接发发件箱验证验证身份 否 者发发件时时会抛异常 isLogin true catch Exception e isLogin false e printStackTrace return isLogin 验证验证用户输户输入数据的有效性 public boolean checkUser boolean check false boolean checkSMTP SMTPHost toLowerCase startsWith smtp 验证验证 smtp 服务务器 boolean checkPOP POP3Host toLowerCase startsWith pop 验证验证 pop 服务务器 boolean checkPassword equals password boolean checkUser EditorUtils checkEmailAdress user 验证邮验证邮箱的有 效性 if checkSMTP 验证验证通过过 return check 添加附件 添加附件 private void addAttachment if listmodel getSize 4 JOptionPane showMessageDialog this 只能添加4个附件 return File f new File 得到当前目录录 JFileChooser chooser new JFileChooser f 构造一个当前路径的文件选择选择 器 if chooser showOpenDialog getContentPane JFileChooser APPROVE OPTION 如果选择选择确定键键 File file chooser getSelectedFile Icon icon chooser getIcon file attachmentList setCellRenderer new CellRender icon listmodel addElement file getName 将附件添加到JLIST中 attachArrayList add file getPath 将附件的路径添加到附件列表中 if listmodel getSize 1 boxV1 add adjunctL boxV2 add jsp validate repaint 发发送邮邮件 new Thread 开启一个新的线线程发发送邮邮件 public void run String message if equals message sendMail send SendedMailTable getSendedMailTable setValues toMan subject attachArrayList text copy sendMan 将邮邮件添加到已发发送 message 邮邮件已发发送成功 else message 邮邮件发发送失败败 失败败原因 n message progressBar dispose JOptionPane showMessageDialog SendFrame this message 提示 JOptionPane INFORMATION MESSAGE start 刷新列表 splitPane setOneTouchExpandable true 在分隔条上提供一个 UI 小部件来快速展开 折叠分隔条 收件箱列表 获获得所有邮邮件的列表 public Message getAllMail throws Exception 建立POP3连连接 connect 连连接邮邮件服务务器 取得一个Folder对对象 得到默认认的收件箱文件夹 folder store getDefaultFolder getFolder INBOX if folder null System out println 出错错 if folder isOpen folder open Folder READ ONLY folder open Folder READ WRITE 取得所有的Message对对象 msg folder getMessages FetchProfile profile new FetchProfile profile add FetchProfile Item ENVELOPE folder fetch msg profile closeConnect 关闭连闭连接邮邮件服务务器 return msg 对邮对邮件的操作 查查找指定邮邮件 public Message findMail Message msg String id throws Exception Enumeration enumMail null Header h null for int i 0 i msg length i enumMail msg i getAllHeaders 查查找邮邮件头头中的Message ID项项 while enumMail hasMoreElements h Header enumMail nextElement 根据传传入的message id来查查找目标邮标邮件 boolean messageId h getName equals Message ID h getName equals Message Id if messageId return null 删删除邮邮件 public boolean deleteMail String id boolean isDelete false try connect 连连接邮邮件服务务器 取得一个Folder对对象 folder store getDefaultFolder getFolder INBOX folder open Folder READ WRITE Message deletemsg folder getMessages Message mes null for int i 0 i id length i mes findMail deletemsg id i 查查找指定邮邮件 mes setFlag Flags Flag DELETED true 把邮邮件标记为删标记为删除 closeConnect 关闭邮闭邮件服务务器的连连接并删删除邮邮件 CheckNewMialUtil isCheck true 设设置新邮邮件标记标记 isDelete true catch Exception e e printStackTrace return isDelete 读读取邮邮件内容 public Map readMail String id throws Exception Map map new HashMap 找到目标邮标邮件 Message readmsg findMail msg id 读读取邮邮件标题标题 map put subject readmsg getSubject 读读取发发件人 map put sender MimeUtility decodeText readmsg getFrom 0 toString map put attach 取得邮邮件内容 if readmsg isMimeType text map put content readmsg getContent toString else Multipart mp Multipart readmsg getContent BodyPart part null String disp null StringBuffer result new StringBuffer 遍历历每个Miltipart对对象 for int j 0 j mp getCount j part mp getBodyPart j disp part getDisposition 如果有附件 if disp null 解决中文附件名的 问题问题 map put attach filename 下载载附件 InputStream in part getInputStream 附件输输入流 if attachFile isDownload filename attachFile choicePath filename in 下载载附件 else 显显示复杂邮杂邮件正文内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鲁山城投招聘考试题库及答案
- 建设工程项目合作协议合同书
- 新能源汽车购买及售后维护合同
- 入职医院笔试题目及答案
- 人资经理笔试题库及答案
- 人民银行笔试题及答案
- 2025年患者跌倒坠床的预防试题(附答案解析)
- 群团工作笔试试题及答案
- 《游恒山记》同步练习(含答案)
- 青马工程笔试题库及答案2025
- SF-三福的历史与文化 v2.0
- 幼儿园故事《小红帽》PPT模板
- GB/T 6723-2017通用冷弯开口型钢
- GB/T 4456-2008包装用聚乙烯吹塑薄膜
- 葫芦丝(初学教学)-课件
- 2023年中国教育出版传媒集团有限公司招聘笔试题库及答案解析
- 李家小学教师绩效考核实施方案
- 小粒咖啡栽培技术措施课件
- 曲顶柱体的体积市公开课金奖市赛课一等奖课件
- 全国人防信息系统综合集成建设技术指南
- 材料吊装方案
评论
0/150
提交评论