JavaMail详解(一)——协议篇 - 高飞网
298 人阅读

JavaMail详解(一)——协议篇

2017-07-28 02:09:46

    最近由于工作的关系,对邮件做了一些研究,抽空把这几天学到的东西记录下来,以备后用,如果能对读者有所帮助,那就更好了。闲话少说,第一篇,先说邮件协议。

    所谓协议,本质上是用于在通讯通道的连接端之间,进行正确地信息传输的一种方式。若想使用电子邮件,你就得用邮箱客户端去连接邮件服务器,而客户端与服务端使用各自的协议进行信息交换。电子邮件协议就是帮助客户端向服务端、或从服务端获取信息的一系统规则。这里,我们会讨论多个协议,如SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),POP(Post Office Protocol,邮局协议)和IMAP(Internet Mail Access Protocol,网络邮件访问协议)。

    说到协议,自然不能不提TCP/IP协议簇,那邮件协议处于协议簇的什么层级呢?从下图可见,邮件协议(POP3/IMAP/SMTP)处理TCPIP协议的最上层,也就是应用层。

    POP与IMAP都是邮件的接收协议,而SMTP是邮件发送协议。如下图:


1. POP协议

    POP(Post Office Protocol,邮局协议)提供了一种简单的,标准的方式,用以访问邮件和从服务端下载邮件到用户的电脑上。POP协议有多个版本,当前标准版本是POP3。

    当使用POP协议时,在服务上的你的所有邮件都会被下载到本地。你也可以选择遗弃服务的邮件副本。该协议的优势在于,一旦邮件下载下来,你就可以切断网络连接,在空闲时阅读邮件,而不会再耗费通讯费用。另外,你还可以避免很多垃圾邮件或病毒。更多详细内容请参考 POP3 RFC说明书。POP3是POP协议的第三个版本,监听110端口。

要点:

  1. POP是一个应用层协议
  2. 邮件POP支持离线访问消息,因此它只需要更少的网络时间
  3. POP不支持灵活的邮件查询
  4. 为了查看邮件,必须把邮件下载下来。
  5. 只允许在服务端创建一个邮箱
  6. 不适合访问非邮件数据
  7. POP指令通常是一些简单的如3、4个字母的代码。如STAT。

https://www.tutorialspoint.com/javamail_api/javamail_api_pop3_servers.htm

2. IMAP 协议

    IMAP(Internet Mail Access Protocol,网络邮件访问协议)首次提出是1986年,是一个用以向邮件服务端查询邮件的协议。IMAP就一个C/S协议,可以通过网络服务端接收和处理电子邮件。因为该协议只是一些小数据传输,因此可以工作在很慢的网络环境中。只有在你需要阅读一个电子邮件时,才会到服务端去下载。你还可以创建和操作服务端的文件夹或者邮箱,删除消息等。IMAP监听在143端口。IMAP协议到目前为止存在5个版本,分别是Original IMAP、IMAP2、IMAP3、IMAP2bis、IMAP4。详情请参考 IMAP RFC说明书

要点:

  1. IMAP协议允许客户端在不下载邮件的情况下,通过服务端对邮件进行操作。
  2. 邮件由远程服务器处理和维护
  3. 它使我们可以在不阅读邮件的情况下进行很多操作,如下载、删除邮件。它使我们可以创建、操作和删除被叫做邮箱的远程邮件文件夹。
  4. IMAP使得用户可以查询指定条件的邮件。
  5. 它允许在多个服务端并发访问多个邮箱。

https://www.tutorialspoint.com/javamail_api/javamail_api_imap_servers.htm

3. SMTP 协议

    SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)在1982年首次提出。它是在网络中高效而可靠地发送邮件的标准协议。SMTP协议只能用于发送邮件而不能接收邮件。SMTP监听在25端口。详情参考 SMTP RFC说明书

要点:

  1. SMTP是应用层协议
  2. SMTP是面向连接的协议
  3. SMTP是基于文本的协议
  4. 通过TCP/IP网络在邮件服务器间处理信息交换
  5. 除了发送邮件,SMTP也提供关于接收邮件的通知。
  6. 当你发送邮件时,你的邮件客户端会将邮件发送到你的邮件服务器,而你的邮件服务会进一步连接接收方的邮件服务器。
  7. SMTP指令指定了发送者和接收者的邮件地址,并据此来发送邮件。
  8. 服务端间的指令交换对于用户是透明的。
  9. 某些情况下,消息可能发送失败,此时会向发送者发送一个错误报告,这使得协议更为可靠。

https://www.tutorialspoint.com/javamail_api/javamail_api_smtp_servers.htm

附:POP与IMAP的区别

编号POPIMAP
1通常用作支持单一客户端设计用来处理多客户端
2消息访问是离线的消息访问在线,当然也支持离线模式
3POP不允许灵活查询邮件提供了查询邮件的能力
4所有的消息都必须下载到本地允许选择性的传输消息到客户端
5在服务端只允许创建一个邮箱可以在服务端创建多个邮箱
6不适合访问非邮件数据适合访问非邮件数据,如附件
7POP指令非常简短,通常3到4个字母,如STATIMAP协议不是简写的,经常是完整的,如STATUS
8最小的占用服务端资源客户端所有操作都依赖服务端
9邮件一旦被下载后,就不能被其他地方访问允许邮件从多个地方访问
10邮件不会自动下载用户查看邮件头部信息和发送者,然后再决定是否下载
11POP需要更少的网络时间IMAP需要更多的网络时间。


还没有评论!
54.81.157.56