基于web的电子邮件系统邮件协议研究与系统功能实现毕业论文(编辑修改稿)内容摘要:

MVC 模式的目的就是实现 Web 系统的职能分工。 Model 层实现系统中的业务逻辑,通常可以用 JavaBean 或 EJB 来实现。 View 层用于与用户的交互,通常用 JSP 来实现。 Controller 层是 Model 与 View 之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。 JavaMail API 研究 JavaMail API 简介 JavaMail API 是读取、撰写、发送电子信息的可选包。 我们可用它来建立如 Eudora、Foxmail、 MS Outlook Express 一般的邮件用户代理程序( Mail User Agent,简称 MUA)。 而不是像 sendmail 或者其它的邮件传输代理( Mail Transfer Agent,简称 MTA)程序那样可以传送、递送、转发邮件。 从另外一个角度来看,我们这些电子邮件用户日常用MUA 程序来读写邮件,而 MUA 依赖着 MTA 处理邮件的递送。 相关协议一览 4大信息传输协议: SMTP 、 POP 、 IMAP 、 MIME, 上面的 4个协议,并不 是全部,还有NNTP 和其它一些协议可用于传输信息,但是由于不常用到,所以本文便不提及了。 理解这 4 个基本的协议有助于我们更好的使用 JavaMail API。 然而 JavaMail API 是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。 确切的说,如果我们使用的功能并不被我们选择的协议支持。 (1)SMTP 简单邮件传输协议定义了递送邮件的机制。 (2)POP 基于 WEB 的电子邮件系统邮件协议研究与系统功能实现 第 11 页 共 33 页 POP 是一种邮局协议,目前为第 3个版本,即众所周知的 POP3。 POP 定义了一种用户如何获得邮件的机制。 它规定了每个用户使用一个单独的邮箱。 大多数人 在使用 POP 时所熟悉的功能并非都被支持,例如查看邮箱中的新邮件数量。 而这个功能是微软的 Outlook内建的,那么就说明微软 Outlook 之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。 因此在我们使用 JavaMail API 时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,我们不得不自己进行计算。 (3)IMAP IMAP 使用在接收信息的高级协议,目前版本为第 4 版,所以也被称为 IMAP4。 需要注意的是在使用 IMAP 时,邮件服务器必须支持该协议。 从这个方面讲,我们 并不能完全使用 IMAP 来替代 POP,不能期待 IMAP 在任何地方都被支持。 假如邮件服务器支持 IMAP,那么我们的邮件程序将能够具有以下被 IMAP 所支持的特性:每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。 其与 POP 相比高级之处显而易见,但是在尝试采取 IMAP 时,我们认识到它并不是十分完美的:由于 IMAP 需要从其它服务器上接收新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。 并且 IMAP 与 POP 的一个不同之处是 POP 用户在接收邮件时将从邮件服务器上下载邮件 ,而 IMAP 允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间, 这将直接导致邮件服务器上磁盘空间暴涨。 (4)MIME MIME 并不是用于传送邮件的协议,它作为多用途邮件的扩展定义了邮件内容的格式:信息格式、附件格式等等。 一些 RFC 标准都涉及了 MIME: RFC 822, RFC 2045, RFC 2046, RFC 2047。 (5)NNTP 和其它的第三方协议 JavaMail API 在设计时考虑到与第三方协议实现提供商之间的 分离,我们可以很容易的添加一些第三方协议。 JavaMail 安装 (1)安装 JavaMail 为了使用 JavaMail API,需要 下载文件名格式为 javamail[version].zip 的文件(这基于 WEB 的电子邮件系统邮件协议研究与系统功能实现 第 12 页 共 33 页 个文件中包括了 JavaMail 实现),并将其中的 文件添加到 CLASSPATH 中。 这个实现提供了对 SMTP、 IMAP POP3 的支持。 (2) 安装 JavaBeans Activation Framework 在安装了 JavaMail 之后 ,我们还需要安装 JavaBeans Activation Framework,因为这个框架是 JavaMail API 所需要的。 如果我们使用 J2EE 的话,那么我们并无需单独下载JavaMail,因为它存在于 中,只需将 加入到 CLASSPATH 即可。 此框架增加了对任何数据块的分类、以及对它们的处理的特性。 这些特性是 JavaMail API需要的。 JavaMail API 详解 (1) JavaMail 环境 A. JavaMail 核心类结构 在 : Session、 Message、 Address、 Authenticator、Transport、 Store、 Folder。 而且在 包中还有一些常用的子类。 B. Session Session 类定义了基本的邮件会话 , 就像 Http 会话那样,我们进行收发邮件的工作都是基于这个会话的。 Session 对象利用了 对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。 Session 类 的 构 造 方 法 是 私 有 的 , 所 以 我 们 可 以 使 用 Session 类提供的getDefaultInstance()这个静态工厂方法获得一个默认的 Session 对象: Properties props = new Properties()。 Session session = (props, null)。 或者使用 getInstance()这个静态工厂方法获得自定义的 Session: Properties props = new Properties()。 Session session = (props, null)。 C. Message 当我们建立 了 Session 对象后,便可以被发送的构造信息体了。 在这里 SUN 提供了Message 类型来帮助开发者完成这项工作。 由于 Message 是一个抽象类,大多数情况下,我们使用 这个子类,该类是使用 MIME 类 型、 MIME基于 WEB 的电子邮件系统邮件协议研究与系统功能实现 第 13 页 共 33 页 信息头的邮箱信息。 信息头只能使用 USASCII 字符,而非 ASCII 字符将通过编码转换为 ASCII 的方式使用。 为了建立一个 MimeMessage 对象, 我们必须将 Session 对象作为 MimeMessage 构造方法的参数传入: MimeMessage message = new MimeMessage(session)。 注意:对于 MimeMessage 类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。 在建立了 MimeMessage 对象后,我们需要设置它的各个 part,对于 MimeMessage 类来说,这些 part 就是 MimePart 接口。 最基本的设置信息内容的方法就是通过表示信息内容和米么类型的参数调用 setContent()方法: (lgpzll, text/plain)。 然而,如果我们所使用的 MimeMessage 中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。 (lgpzll)。 前面所讲的两种方法,对于文本信息,后者更为合适。 而对于其它的一些信息类型,比如 HTML 信息,则要使用前者。 使用 setSubject()方法对邮件设置邮件主题: (First)。 D. Address 像 Message 一样, Address 类也是一个抽象类,所以使用 这个子类。 通过传入代表邮件地址的字符串,我们可以建立一个邮件地址类: Address address = new InterAddress()。 如果要在邮件地址后面增加名字的话,可以通过传递两个参数:代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类: Address address = new InterAddress( , lgpzll)。 在建立了邮件地址类后,我们通过 message 的 setFrom()和 setReplyTo()两种方法设置邮件的发信人: (address)。 (address)。 基于 WEB 的电子邮件系统邮件协议研究与系统功能实现 第 14 页 共 33 页 若在邮件中存在多个发信人地址,我们可用 addForm()方法增加发信人: Address address[] =””。 (address)。 为了设置收信人,我们使用 addRecipient()方法增加收信人,此方法需要使用 的常量来区分收信人的类型: (type, address) 下面是 的三个常量 : 收件人 抄送人 发件人 E. Authenticator 像 类那样, JavaMail API 通过使用授权者类( Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。 在 包中可以找到这个 JavaMail 的授权者类( Authenticator)。 在使用 Authenticator 这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回 PasswordAuthentication 对象(用于存储认证时要用到的用户名、密码) getPasswordAuthentication()方 法。 并且要在 Session 中进行注册,使 Session能够了解在认证时该使用哪个类。 下面代码片断中的 MyAuthenticator 就是一个 Authenticator 的子类。 Properties props = new Properties()。 Authenticator auth = new MyAuthenticator()。 Session session = (props, auth)。 F. Transport 在发送信息 时, Transport 类将被用到。 这个类实现了发送信息的协议(通称为 SMTP),此类是一个抽象类,我们可以使用这个类的静态方法 send()来发送消息: (message)。 也可由 Session 获得相应协议对应的 Transport 实例。 并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接: ()。 Transport transport = (smtp)。 基于 WEB 的电子邮件系统邮件协议研究与系统功能实现 第 15 页 共 33 页 (host, username, password)。 (message, ())。 ()。 如果需要在发送邮件过程中监控 mail 命令的话,可以在发送前设置 debug 标志: (true)。 G. Store 和 Folder 接收邮件和发送邮件很类似都要用到 Session。 但 是在获得 Session 后,我们需要从Session 中获取特定类型的 Store,然后连接到 Store,这里的 Store 代表了存储邮件的邮件服务器。 在连接 Store 的过程中,极有可能需要用到用户名、密码或者Authenticator。 Store store = (pop3)。 (host, username, password)。 在连接到 Store 后,一个 Folder 对象即目录对象将通过 Store 的 getFolder()方法被返回,我们可从 这个 Folder 中读取邮件信息: Folder folder = (INBOX)。 ()。 Message message[] = ()。 首先从 Store 中获得 INBOX 这个 Folder(对于 POP3 协议只有一个名为 INBOX 的 Folder有效),然后以只读 ( )的方式打开 Folder,最后调用 Folder 的getMessages()方法得到目录 中所有 Message的数组。 对于 POP3协议只有一个名为 INBOX的 Folder 有效,而对于 IMAP 协议,我们可以访问多个 F。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。