1. 邮件服务器

按功能划分,邮件服务器可以划分为两种类型:

  • SMTP邮件服务器:用于替用户发送邮件和接收外面发送给本地用户的邮件,相当于现实生活中邮局的邮件接收部门(可接收普通用户要投出的邮件和其他邮局投递进来的邮件)。
  • POP3/IMAP邮件服务器:用于帮助用户读取SMTP邮件服务器接收进来的邮件,相当于邮局里专门为前来取包裹的用户提供服务的部门。

2. 邮件发送和接收过程

163邮箱用户发送电子邮件到qq邮箱用户的过程如图所示,现解释如下:

  1. 163邮箱用户A编辑并发送电子邮件,交到163的邮箱服务器,这一步使用的是SMTP协议。
  2. 163邮箱根据用户A发送的邮件进行解析,判断收件地址如果为163邮箱,则存放到163邮箱存储空间;判断为其他邮箱,则将邮件转发到其他邮箱的服务器,转发使用的也是SMTP协议。
  3. qq邮箱接收到163邮箱转发来的邮件,会进行判断收件地址是否是qq邮箱,如果是,则将邮箱存放于qq邮箱存储空间。
  4. 用户B登陆qq邮箱,与163的POP3/IMAP服务器建立网络连接,查找未读邮件,会通过客户端向163邮箱服务器发送请求。
  5. 163邮箱服务器接收到用户B发送的请求后,会去存储空间取出用户B未收取的邮件。
  6. 服务器取出邮件,将邮件发送给用户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对象时提供信息支持。

四个类的关系如下:

详细一点则如下所示:

参考:

https://www.cnblogs.com/ysocean/category/1094464.html

邮件相关协议及JavaMail 包简介的更多相关文章

  1. JavaMail学习之一-邮件传输协议

    协议:规定好的格式就是协议.就像http协议有请求协议和响应协议,邮件传输也分为发.收邮件的协议. 邮件协议分3种: 发邮件的:SMTP (Simple Mail Transport  Protoca ...

  2. WebRTC:数据传输相关协议简介

    对网络协议来说,需要做的通常就两件事情:1.建立连接,2.传输数据,WebRTC也不例外. 假设WebRTC应用的两端已经建立了连接,那么,剩下就是如何传输数据的问题了. WebRTC同时支持传输音视 ...

  3. Spring 依赖的Jar包简介

    Spring 依赖的Jar包简介 Spring的依赖关系 依赖关系分组 JAR文件 说 明 ant ant.jar, ant-junit.jar, ant-launcher.jar Spring采用A ...

  4. SMTP 简单邮件传输协议

    SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...

  5. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)

    本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket   分层的 ...

  6. Hadoop2.0源码包简介

    Hadoop2.0源码包简介 1.解压源码包: 2.目录结构: hadoop-common-project:Hadoop基础库所在目录,如RPC.Metrics.Counter等.包含了其它所有模块可 ...

  7. 面试问题之计算机网络:OSI七层网络模型及相关协议

    一.应用层 功能:为应用程序提供服务并规定应用程序中通信相关的细节: 包括的协议如下: 1.超文本传输协议HTTP:这是一种基本的客户机/服务器的访问协议:浏览器向服务器发送请求,而服务器会应相应的网 ...

  8. CCNA网络工程师学习进程(6)vlan相关协议的配置与路由器简单配置介绍

        前面已经介绍了大部分与vlan技术相关的交换机的协议的配置,更深层次的还有STP协议和以太网端口聚合技术,接着还会简单介绍一下路由器的基本应用.     (1)STP(Spanning-tre ...

  9. IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol)。

    IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol).IMA ...

随机推荐

  1. 关于NLP和深度学习,准备好好看看这个github,还有这篇介绍

    这个github感觉很不错,把一些比较新的实现都尝试了: https://github.com/brightmart/text_classification fastText TextCNN Text ...

  2. 解析eml文件

    之前使用lumisoft解析eml,总是会出现很奇怪的问题,所以改使用微软自家的com库,确实厉害兼容性更好,代码 string file = emailPath; CDO.Message oMsg ...

  3. Permutations leetcode java

    题目: Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the f ...

  4. Laravel应用性能调优

    这次性能测试方案中用到的优化技巧主要基于 Laravel 框架本身及其提供的工具. 关闭应用debugapp.debug=false 缓存配置信息php artisan config:cache 缓存 ...

  5. Tensorflow进行POS词性标注NER实体识别 - 构建LSTM网络进行序列化标注

    http://blog.csdn.net/rockingdingo/article/details/55653279  Github下载完整代码 https://github.com/rockingd ...

  6. MongoDB: 如何删除一个collection中的一个字段?

      Try this: If your collection was 'example' db.example.update({}, {$unset: {words:1}}, false, true) ...

  7. javascript 关键字不能作为变量来使用

    var cfg={export: "export.aspx"} 这句代码中使用了一个关键字“export” 所以在IE8中报错. 那么有哪些关键字不能作为变量呢? 关键字”就是 J ...

  8. 壮士断腕!WordPress宣布停止使用React

    WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,也可以把WordPress当作一个内容管理系统(CMS)来使用. WordPr ...

  9. log4j.xml写入数据库,只有SQL和参数,无其他信息

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SY ...

  10. AngularJs - Javascript MVC 框架

    在2012年6月google发布了AngularJs 1.0稳定版, 并宣称:AngularJS可以让你扩展HTML的语法,以便清晰.简洁地表示应用程序中的组件,并允许将标准的HTML作为你的模板语言 ...