1. 邮件服务器
按功能划分,邮件服务器可以划分为两种类型:
- SMTP邮件服务器:用于替用户发送邮件和接收外面发送给本地用户的邮件,相当于现实生活中邮局的邮件接收部门(可接收普通用户要投出的邮件和其他邮局投递进来的邮件)。
- POP3/IMAP邮件服务器:用于帮助用户读取SMTP邮件服务器接收进来的邮件,相当于邮局里专门为前来取包裹的用户提供服务的部门。
2. 邮件发送和接收过程
163邮箱用户发送电子邮件到qq邮箱用户的过程如图所示,现解释如下:
- 163邮箱用户A编辑并发送电子邮件,交到163的邮箱服务器,这一步使用的是SMTP协议。
- 163邮箱根据用户A发送的邮件进行解析,判断收件地址如果为163邮箱,则存放到163邮箱存储空间;判断为其他邮箱,则将邮件转发到其他邮箱的服务器,转发使用的也是SMTP协议。
- qq邮箱接收到163邮箱转发来的邮件,会进行判断收件地址是否是qq邮箱,如果是,则将邮箱存放于qq邮箱存储空间。
- 用户B登陆qq邮箱,与163的POP3/IMAP服务器建立网络连接,查找未读邮件,会通过客户端向163邮箱服务器发送请求。
- 163邮箱服务器接收到用户B发送的请求后,会去存储空间取出用户B未收取的邮件。
- 服务器取出邮件,将邮件发送给用户B,用户B是通过POP3或IMAP协议读取邮箱中的邮件的。
3. 电子邮件传输协议
电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,那就必须要遵守一定的规则,这个规则就是邮件传输协议。上面涉及到的协议如下:
- SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。
- POP3协议:全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信规则。
- IMAP协议:全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议的一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则。
所有的邮件服务器和邮件客户端软件程序都是基于上面的协议编写的。
4. 电子邮件格式协议
RFC822定义了邮件内容的格式和邮件头字段的详细细节,MIME协议则是定义了如何在邮件体部分表达出的丰富多样的数据内容。
5. JavaMail简介
JavaMail 是sun公司(现已被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,可以调用JavaMail 开发包中相应的API类,而无须考虑邮件的底层实现细节。
JavaMail API 按照功能可以划分为如下三大类:
- 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件;
- 发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议;
- 接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
以上三种类型的API在JavaMail 中由多个类组成,除此之外还有Session类,四个类共同组成Java语言的邮件处理实现。
- Session类:Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
四个类的关系如下:
详细一点则如下所示:
参考: