电子邮件发送协议 是一种基于“ 推 ”的协议,主要包括 SMTP ; 邮件接收协议 则是一种基于“ 拉 ”的协议,主要包括 POP协议 和 IMAP协议 ,在正式介绍这些协议之前,我们先给出邮件收发的体系结构:

从上图可以看出邮件收发的整个过程大致如下:

(1)发件人调用用户代理编辑要发送的邮件。

(2)发件人点击屏幕上的”发送邮件“按钮,把发送邮件的 工作全部交给用户代理来完成。用户代理通过SMTP协议将邮件发送给发送方的邮件服务器(在这个过程中,用户代理充当SMTP客户,而发送方的邮件服务器则充当SMTP服务器)。

(3)发送方的邮件服务器收到用户代理发来的邮件后,就把收到的邮件临时存放在邮件缓存队列中,等待时间成熟的时候再发送到接收方的邮件服务器(等待时间的长短取决于邮件服务器的处理能力和队列中待发送的信件的数量 )。

(4)若现在时机成熟了,发送方的邮件服务器则向接收方的邮件服务器发送邮件缓存中的邮件。在发送邮件之前,发送方的邮件服务器的SMTP客户与接收方的邮件服务器的SMTP服务器需要事先建立TCP连接,之后再将队列中 的邮件发送出去。值得注意的是,邮件不会在因特网中的某个中间邮件服务器落地 。

(5)接收邮件服务器中的SMTP服务器进程在收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。

(6)收件人在打算收信时,就运行PC机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件。 注意,在这个过程中,收件人是POP3客户,而接收邮件服务器则是POP3客户,箭头的方向是从邮件服务器指向接收用户,因为这是一个“拉 ”的操作 。

下面我们根据上面的总体过程介绍下各个组件。

1.用户代理

用户代理UA ( User Agent )是一个软件包(程序),它的功能是:撰写、阅读、回复和转发报文,还能处理邮箱(如创建收信箱和发信箱)。共有两种类型的用户代理: 命令驱动 和GUI 。 命令驱动 属于早期的电子邮件,通过命令发送和接收邮件,而GUI 则是包含图形界面,允许用户使用键盘和鼠标与软件进行交互。

2. SMTP协议

SMTP协议 服务器的熟知端口号为25 ,与之前总结过的telnet协议和FTP协议类似的地方是,SMTP协议的客户端和服务器端都是通过命令和响应的形式进行交互 ,即SMTP客户通过命令向SMTP服务器发送操作请求,而服务器则通过3位的数字对响应的请求作出响应。SMTP规定了14条命令和21中应答信息,每条命令有4个字母组成,而每一种应答一般只有一行信息,有一个3位数字的代码开始,后面附上很简单的附加说明。

邮件传送主要包括3个阶段: 建立连接 、 邮件传送 和 终止连接 。

建立连接阶段:

1.当SMTP客户端每隔一定时间对邮件缓存扫描一次,如发现有邮件,就使用SMTP的熟知端口号25与接收方的邮件服务器的SMTP服务器建立TCP连接。

2.接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421(服务器不可用)。

3.客户发送HELO报文,并使用它的域名地址标志自己。目的是:用来把客户的域名通知服务器,值得注意的是, 在TCP的连接建立阶段,发送方和接收方都是通过它们的IP地址来告诉对方的 。(HELO报文是最初的,用户名和密码都不加密。现在改为EHLO,用户名和密码都进行base64编码发送)

4.服务器响应代码250(请求命令完成)或根据情况的其他一些代码。

报文传送阶段:

在SMTP客户与服务器之间建立连接后,发件人就可以与一个或多个收件人交换单个的报文了。若收件人超过一个,则下面步骤3和步骤4将重复进行。

1.客户发送MAIL FROM报文介绍报文的发送者。它包括发送人的邮件地址(邮箱名和域名,如house@qq)。这个步骤是必要的:因为可以给服务器在返回差错或报文时的返回邮件地址 。

2.服务器响应代码250(请求命令完成)或其他适当的代码。

3.客户发送RCPT(收件人)报文,包括收件人的邮件地址,RCPT命令的作用是 : 先弄清接收方系统是否已经准备好接收邮件的准备,然后才发送邮件,这样做视为了避免浪费通信资源,不至于发送了很长的邮件以后才知道是因地址错误 。

4.服务器响应代码250或其他适当的代码。

5.客户发送DATA报文对报文的传送进行初始化,DATA命令表示要开始传送邮件的内容了。

6.服务器响应代码"354 Start mail input: end with <CRLF>.<CRLF>"或其他适当的报文(如421 服务器不可用,500 命令无法识别)。

7.客户用连续的行发送报文的内容。每一行的行结束时输入 <CRLF>.<CRLF> ,即回车换行.回车换行,表示邮件内容结束。

8.服务器响应代码(250 请求命令完成)或其他适当的代码。

值得注意的是:虽然SMTP使用TCP连接试图使邮件的传送可靠,但它并不能保证不丢失邮件。也就是说,使用SMTP传送邮件只能说可以可靠地传送接收方的邮件服务器,在往后的情况就不知道了。接收方的邮件服务器也许会出故障,使收到的服务器全部丢失(在收件人读取信件之前)。

终止连接

在报文传送成功后,客户就终止连接。包括如下步骤:

1.客户发送QUIT命令。

2.服务器响应221(服务关闭)或其他代码。

在连接终止阶段后,TCP连接必须关闭。

3.POP协议

POP协议, Post office Protocal 。邮件交付的第一阶段和第二阶段使用SMTP,而第三阶段则使用邮件读取协议。SMTP是一个push协议,而第三阶段则使用pull协议,包括POP和IMAP协议,POP主要使用POP3,而IMAP协议则主要使用IMAP4 。

POP3采用C/S的工作方式。在接收邮件的用户PC机中的用户代理UA必须运行POP3的客户程序,而在收件人所连接的ISP的邮件服务器中则运行POP的服务器程序。POP服务器只有在用户输入鉴别信息(用户名+密码)后,才允许对方对邮箱进行读取 。

POP3有 两种工作方式 :删除方式和保存方式。删除方式 就在每一次读取邮件后就把邮箱中的这个邮件删除, 保存方式 就是在读取邮件后仍然在邮箱中保存这个邮件,该方式是通过对之前的POP3工作方式(即删除)的缺点进行弥补,对功能进行扩充。

4. IMAP协议

IMAP协议, Internet Mail Access Protocal (因特网邮件读取协议)。 IMAP协议比POP3协议复杂的多,也是按照C/S的工作方式,现在较新的版本是IMAP4。

在使用IMAP时,用户的PC机上运行IMAP客户程序,然后与接收方的邮件服务器上的IMAP服务器程序建立TCP连接。 POP3不允许用户在邮件服务器上整理自己的邮件,用户在服务器上不能不同的文件夹,POP3也不允许用户在下载邮件之前读取邮件的部分内容,而IMAP则克服了这些POP3的缺点,说白了就是POP3协议不太愿意让用户直接操作服务器,而IMAP正好客户了这些缺点 。

IMAP4提供了以下功能( 这些功能POP3则没有 ):

1.用户在下载邮件之前可以检查邮件的首部。

2.用户在下载邮件之前可以用特定的字符串搜索电子邮件的内容。

3.用户可以部分地下载电子邮件。

4.用户可以在邮件服务器上创建、删除邮箱,或对邮箱重命名。(IMAP是双向的,可以同步本地修改到服务端;POP只能同步服务端到本地)

5.为了存放电子邮件,用户可以在文件夹中创建分层次的邮箱。

注意 :不用把邮件的发送协议SMTP协议与邮件的读取协议POP或IMAP协议弄混淆了。发送人的UA向发送邮件服务器发送邮件,以及发送方的邮件服务器向接受方的邮件服务器发送邮件都是采用SMTP协议,而收件人的UA从邮件接收服务器中接收文件则采用的是POP协议或IMAP协议。

5. MIME

MIME协议( Multipurpose Internet Mail Extensions ),通用因特网邮件扩充协议 ,作为SMTP的一种辅助协议,其引入是为了克服SMTP的如下不足:

1.SMTP只能发送使用NVT( 虚拟网络终端 ) 7位ASCII码格式的报文,它不能使用NVT 7位ASCII码不支持的语言(如汉语,日语,德语等)。

2.SMTP不能传送可执行文件或其他二进制对象(如图像文件)。

3.SMTP不支持音频或视频文件。

4.SMTP发送的邮件的长度受到限制。

为了克服以上的不足,便引入了MIME协议,MIME协议是一种扩展协议性的辅助协议,“扩充”指的是只是对原来协议的扩展,而不是取代。它允许非ASCII码数据能够通过电子邮件传送。MIME在发送方把非ASCII码数据转换为NVT ASCII数据,之后的工作再交给SMTP完成,在接收方再将NVT ASCII数据还原成原来的数据。MIME的体系结构如下:

MIME定义了5种首部,用来加在原始的电子邮件部分以定义参数的转换,这五种首部分别是: MIME-Version(MIME版本 )、 Constent-Type ( 内容类型 )、 Content-Transfer-Encoding ( 内容-传送-编码 )、 Content-Id ( 内容-标识 )和 Content-Description ( 内容描述 )。

MIME版本 :定义了MIME使用的版本。

内容-类型 :定义报文主体使用的数据类型和子类型,用<数据类型/子类型>表示。

内容-传送-编码 :定义了邮件的主体在传送时是如何编码的。

内容-标识 :在多报文的环境中唯一地标识报文。

内容描述 :定义了主体是否为图像、音频或视频。

6. 基于WWW的邮件

基于WWW的邮件收发系统的体系结构与普通的电子邮件收发系统不同,基于WWW的邮件收发系统的整个过程描述如下:

1.从发送者的浏览器传送到发送方邮件服务器是通过HTTP协议(而一般的则是通过SMTP协议)。

2.从发送方服务器到接收方邮件服务器是通过SMTP协议(与一般的相同)。

3.从接收方到接收者是通过HTTP协议(而一般的则是POP3协议或IMAP协议)。

具体如下图所示:

参考资料

[1]《计算机网络(第5版) 谢希仁》

[2]《TCP/IP协议族 第4版》

邮件的发送和接收过程——STMP、POP、IMAP、MIME相关推荐

  1. 邮件的发送和接收过程-----简单邮件传输协议(SMTP)和邮件读取协议!!!

    图中就是电子邮件的系统结构 以用户A向用户B发送邮件为例 用户A向用户B发送邮件,首先用户A利用由用户代理撰写邮件,包括填写收件人邮箱地址等,然后基于SMTP将邮件发送到其注册的邮箱服务器A的外出邮件 ...

  2. JavaWeb学习总结(五十一)——邮件的发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  3. 邮件的发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  4. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  5. pop3服务器协议初始化失败,邮件的发送和接收故障处理的几点方法

    成天和邮件打交道,难免遇到邮件的发送和接收问题.通常遇到的问题有:网络问题,对方服务器的问题,DNS解析的问题,对方拒绝接收你的邮件等.可以通过以下一些简单的方法,诊断问题的所在: 1)分析NOT D ...

  6. 解析BroadcastReceiver的注册、发送与接收过程

    广播的注册. 发送和接收过程 广播作为四大组件之 ,使用频率远没有 Activity 高,但是广播的工作过程还是十分有必要了解的.本节主要从三个方面讲解广播工作过程,分别是广播的注册.发送和接收.本文 ...

  7. Android筑基——BroadcastReceiver 的动态注册、发送和接收过程(基于api21)

    目录 1. 前言 2. 正文 2.1 广播接收者的动态注册 2.1.1 ContextWrapper.registerReceiver() 方法 2.1.2 ContextImpl.registerR ...

  8. Android-Framework学习笔记(九)—— Broadcast的注册、发送和接收过程

    系列文章 Android-Framework学习笔记(一)-- Android系统架构 Android-Framework学习笔记(二)-- Zygote进程启动过程 Android-Framewor ...

  9. 仿qq邮箱源码程序_小伙子利用C++实现邮件程序发送和接收

    3个通过POP发送和接收邮件的VC++实例程序:三个实例分别如下: 1.pop3高级程序开发是一个能够从pop3服务器中检查所有邮件,并且可以查看邮件内容,也可以删除邮件但是没有实现附件的接收,使用时 ...

最新文章

  1. 让Centos5.6的Firefox支持Java
  2. NameError: name 'go' is not defined
  3. struts2类型转换器
  4. python – IOError:[Errno 28] pip install 设备上没有空间
  5. matlab 里的mod,matlab中mod()函数究竟有什么用?具体的作用(不要告诉我怎么算,我只想知道他有什么用)...
  6. 关于用串口IDLE中断,DMA_GetCurrDataCounter()函数值不变的问题
  7. python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别
  8. typescript vuex_Vue3+TypeScript完整项目上手教程
  9. Linux 系统应用编程——网络编程(高级篇)
  10. java开灯问题_C++之开灯问题(链表)
  11. 【设计模式】第二章 代理模式
  12. bootstrap-vue 中 model 基础用法
  13. 年终将至,如何轻松搞定工作汇报PPT?
  14. linux查看内存_【001】一文带你全面掌握Linux系统体系结构
  15. 搜狐Linux运维工程师面试真题曝光
  16. 如何用word制作英语答题卡_初中英语考试答题卡可编辑WORD版
  17. 分享一个查看U盘闪存的工具,SA们别买到假货了!
  18. 笔记本计算机的连接无线网络,笔记本电脑连接无线网络受限解决方法
  19. 1487 C. Minimum Ties
  20. 0 win10重装partition_gpt分区无法安装win10的根本原因

热门文章

  1. (二)Linux嵌入式开发——软件安装(Ubuntu)
  2. 蓝桥杯 神犇一生 C语言
  3. Vegas 使用教程(一)新建模板
  4. LTE系统调试记录14:频谱感知模块——UE/BS端采用多窗谱算法测量频谱
  5. 安装CPAT--使用CPAT分析lncRNA
  6. 阿里云图数据库GraphDB上线,助力图数据处理
  7. 酷炫flash xml动态相册
  8. 【CAD】通过AutoCAD-VBA画单线图,bilibili视频教程
  9. 自己转换Java程序给BlackBerry使用
  10. 三星数码相机照片恢复,相机格式化后恢复