JavaMail API 基础 (一)

来源:互联网 发布:看韩漫的软件 编辑:程序博客网 时间:2024/05/01 19:45

JavaMail API 简介

JavaMail API 是一个用来阅读、编写和发送电子信息的可选包(标准扩展),你可以用这个包创建邮件用户代理(MUA)类型的程序,类似Eudora、Pine 和 Microsoft Outlook,它的主要用途不是像 sendmail 和其他邮件传输代理程序(MTA)那样传输、分发、和转发信息。可以这么说,用户使用MUA类型的程序读写email,而MUA依赖MTA来处理实际的分发。

 JavaMail API 分成两部分,该API提供了协议无关的信息访问:

  • 第一部分是本文所关注的,基本包括怎么协议无关地(无需考虑协议实现、差异)发送和接收消息
  • 第二部分讲述了协议相关语言,像 SMTP、POP、IMAP 和 NNTP等与JaveMail API的关系,为了与服务器交流,需要协议提供者,而创建协议相关的协议提供者不在本文的讨论范围。

回顾相关协议

在深入 JavaMail API 细节之前, 先回顾一下与之相关的协议, 你将要了解其中四个最基本的:

  • SMTP
  • POP
  • IMAP
  • MIME
你还会接触到NNTP和一些其他的协议。理解所有协议的基础有助于理解如何使用JavaMail API,但由于API被设计为协议无关,有些底层协议的限制是不能克服的,如果选择的协议不支持某项功能,JavaMail API 不能在原来的基础上添加该功能。(你很快就会了解到,在使用POP的时候会经常遇到这个问题)

SMTP

简单邮件传输协议(SMTP)描述的是电子邮件的分发机制。在 JavaMail API 的上下文中,基于 JavaMail 的程序与公司或者因特网服务提供商(ISP)的SMTP服务器通信,然后该SMTP服务器会把信息转发到接收方的SMTP服务器,最终用户通过POP或者IMAP从中获取。这并不要求邮箱服务器是一个开放转发中继,但必须确保SMTP服务器配置合理,JavaMail API中没有配置信息转发服务器或者添加删除电子邮件账户的功能。

POP

POP代表的是邮局协议,现在是第三版,也就是POP3,RFC 1939中定义了该协议。POP是许多人在网络上获取邮件的机制,它定义了对每个用户一个邮箱的支持,这就是它所有的工作了,这也是大多数困惑的来源。许多用户熟悉的功能像查询有多少新邮件,在POP中是不支持的,这些功能都在程序中实现,如记录最后接收的邮件和计算有多少封新邮件。因此,在使用 JavaMail API 的时候,如果你想知道这些信息,那么必须自己计算。

IMAP

IMAP是用来接收邮件的一个更加高级的协议,在RFC 2060中定义,代表的是因特网消息访问协议,现在是第4版,也就是IMAP4。使用IMAP的时候,你的邮箱服务器必须支持这个协议,不能只是在程序中用IMAP替换POP,然后希望支持所有IMAP协议提供的功能。假设你的邮箱服务器支持IMAP,那么基于JavaMail API 的程序便可以让用户在服务器中拥有多个文件夹,并且这些文件夹可以被多个用户共享。

有这些高级的功能,你可能会以为IMAP应该被广泛使用,但事实并非如此。这样做的话会大大加重服务器的负担,因为需要服务器接收新邮件,在有请求的时候分发给用户,并且为每个用户在多个文件夹中维护这些邮件信息。由于它采取集中存储,当用户长期使用的邮箱文件夹越来越大时,每个用户都会受到磁盘耗尽的威胁。而使用POP的话,被保存下来的文件就从邮箱服务器中移除了。

MIME

MIME即多用途因特网邮件扩展,它不是一个邮件传输协议,而是定义了传输的内容:消息格式、附件等等。许多不同的文档都有相关内容:RFC 822,RFC 2045,RFC2046和RFC 2047。作为JavaMail API的用户,你不需要关心这些格式,然而它们存在并且被你的程序使用。

NNTP和其它

由于JavaMail API 中提供者和其他部分的分离,你可以简单地为附加协议添加支持。SUN维护了一张第三方提供者列表,它们利用了SUN不提供支持的协议,你可以在那里找到NNTP(网络新闻传输协议)的支持,S/MIME(安全的MIME)等等。

原创粉丝点击