因特网电子邮箱系统主要由用户代理(user agent) 、邮件服务器(mail server) 和简单邮件传输协议(SMTP)组成
 
邮件服务器(Mail Server)
邮箱:存储发给该用户的Email
报文队列(message queue):存储等待发送的Email,如果几天后仍不能成功,服务器就删除该报文并以电子邮件的形式通知发送方
 
SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务器。
使用TCP进行email消息的可靠传输
每台邮件服务器上既运行SMTP的客户端也运行SMTP的服务器端
Email消息只能包含7位ASCII码,如果某报文包含了非7比特ASCII字符或二进制数据,则该报文必须按照7比特ASCII 码进行编码,传输后解码还原。
传输过程分握手、消息的传输、关闭三个阶段:
S:  hamburger.edu
C: HELO crepes.fr
S: Hello crepes.fr, pleased to meet you
C: MAIL FROM: <alice@crepes.fr>
S: alice@crepes.fr... Sender ok
C: RCPT TO: <bob@hamburger.edu>
S: bob@hamburger.edu... Recipient ok
C: DATA
S: Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: Message accepted for delivery
C: QUIT
S: hamburger.educlosing connection
报文体前面通常有一个包含环境信息的首部位, 其必须含有一个From: 首部行、一个To: 首部行,可以包含一个Subject : 首部行以及其他可选的首部行。(首部行是邮件报文自身的一部分)
必须含有一个From: 首部行和一个To: 首部行;一个首部也许包含一个Subject : 首部行以及其他可选的首部行。
SMTP用的是持久性连接:如果发送邮件服务器有几个报文发往同一个接收邮件服务器,它可以通过同一个TCP 连接发送这些所有的报文。对每个报文,该客户用一个新的MAIL FROM:XXXX 开始,用一个CRLF.CRLF指示该邮件的结束,并且仅当所有邮件发送完后才发送QUIT 。
 
与HTTP对比:
HTTP主要是一个拉协议(pullprotocol);SMTP主要是一个推协议(pushprotocol)
都使用命令/响应交互模式,命令和状态代码都是ASCII码
HTTP 把每个对象封装到它自己的HTTP 响应报文中;SMTP 则把所有报文对象放在一个报文之中。
 
STMP协议的扩展协议:MIME协议
MIME协议定义了5种头部,用来加在原始的STMP头部,以便定义参数的转换。
例如:
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Picture of yummy crepe.
MIME-Version: 1.0 //MIME版本
Content-Transfer-Encoding: base64 //数据编码方式
Content-Type: image/jpeg //多媒体数据的类型、子类型以及参数声明 base64 encoded data ….. //编码后的数据
.........................
......base64 encoded data

邮件访问协议:用于从服务器获取邮件

  • 第三版的邮局协议(Post Office Protocol-Version 3, POP3)
当用户代理(客户)打开了一个到邮件服务器(服务器)端口110上的TCP 连接后, POP3 就开始工作了。
随着建立TCP连接, POP3 按照三个阶段进行工作:特许(authorization) 、事务处理以及更新。
分为下载并删除和下载并保持两种模式。
POP3是无状态的:POP3 服务器并不在POP3 会话过程中携带状态信息
S: +OK POP3 server ready
C: user bob
S: +OK
C: pass hungry
S: +OK user successfully logged on
C: list
S:
S:
S: .
C: retr
S: <message contents>
S: .
C: dele
C: retr
S: <message contents>
S: .
C: dele
C: quit
S: +OK POP3 server signing off
特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。
两个主要的命令: user < user name >和pass < password > ,服务器回答+OK或-ERR
事务处理阶段,用户代理取回报文、对报文做删除标记、取消报文删除标记、获取邮件的统计信息。
用户代理仅使用四个命令: list(列出消息数量)、retr(用编号获取消息)、dele和quit,在处理quit命令后, POP3服务器进入更新阶段,结束该POP3 会话。该邮件服务器删除那些被标记为删除的报文。
  • 因特网邮件访问协议(IMAP)
所有消息统一保存在服务器
把每个报文与一个文件夹联系起来,当报文第一次到达服务器时,它与收件人的INBOX 文件夹相关联。收件人则能够把邮件移到一个新的、用户创建的文件夹(阅读邮件,删除邮件等)中。
为用户提供了创建文件夹、将邮件从一个文件夹移动到另一个文件夹、在远程文件夹中查询邮件的命令
维护了IMAP会话的用户状态信息,例如文件夹的名字以及哪些报文与哪些文件夹相关联。
具有允许用户代理获取报文组件的命令。一个用户代理可以只读取一个报文的报文首部,或只是一个多部分MIME 报文的一部分。
  • 基于Web的电子邮件
用户代理就是普通的浏览器
邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用的是SMTP协议

计算机网络-应用层(3)Email应用的更多相关文章

  1. 应用层之E-mail服务及javaMail邮件发送的知识总结

    关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...

  2. 计算机网络-应用层(5)P2P应用

    P2P系统的索引:信息到节点位置(IP地址+端口号)的映射 在文件共享(如电驴中):利用索引动态跟踪节点所共享的文件的位置.节点需要告诉索引它拥有哪些文件.节点搜索索引从而获知能够得到哪些文件 在即时 ...

  3. 计算机网络-应用层之HTTP协议

    1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...

  4. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  5. 计算机网络-应用层(4)DNS协议

    域名系统(Domain Name System, DNS):一个分层的由DNS服务器实现的分布式数据库+一个使得主机能够查询分布式数据库的应用层协议 DNS服务器通常是运行BIND (Berkeley ...

  6. 计算机网络应用层之cookie

    一.生活中的cookie 无论你知不知道Cookie是什么,在你的生活中,肯定有使用过它.还记得你使用浏览器浏览网页时,当你要登陆时,网页上有一个记住密码或自动登陆的选项,当你选择时,你就使用了Coo ...

  7. [计算机网络-应用层] DNS:因特网的目录服务

    我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ...

  8. [计算机网络-应用层] FTP协议

    文件传输协议:FTP 如下图所示:用户通过一个FTP用户代理与FTP交互.该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接.然后,该用户提供用 ...

  9. [计算机网络-应用层] P2P应用

    首先我们要先来区分一下下面的几种体系结构: CS:Client/Server 客户-服务器结构BS:Browser/Server  浏览器-服务器结构 P2P:Peer to Peer 对等结构 BS ...

随机推荐

  1. 解决移动端rem加载瞬间页面错乱的方法(放大或者缩小)

    移动端布局有很多种,这里我们最常使用到rem+百分比的布局方式(高度/字体设置rem单位,宽度设置百分比)来处理屏幕兼容,这种方法在兼容上是比较不错的,可以使得字体以及整体适应各种大小的屏幕,可以解决 ...

  2. OpenFeign使用步骤

    1. 新建 cloud-consumer-feign-order80 2. pom.xml <?xml version="1.0" encoding="UTF-8& ...

  3. Linux中配置端口转发(反向代理)

    在conf.d目录下建一个文件, 以conf为结尾(如果没有conf.d目录,就自己新建一个) server { listen 80; server_name 127.0.0.1; #这个IP是你服务 ...

  4. 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上。

    问题 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上. 代码 data segment x db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0eh,0 ...

  5. Python os.fchdir() 方法

    概述 os.fchdir() 方法通过文件描述符改变当前工作目录.高佣联盟 www.cgewang.com Unix, Windows 上可用. 语法 fchdir()方法语法格式如下: os.fch ...

  6. luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT

    LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...

  7. Docker学习日记-安装Docker

    Docker是什么: 简单理解就是基于go语言开发的开源的应用容器引擎. 对进程进行封装隔离,属于操作系统层面的虚拟化技术. Docker的优势: 1.更高效的利用系统资源 2.更快速的启动时间 3. ...

  8. 使用ST-Link下载程序出现Error:Flash Download Failed-“Cortex-M3“ 解决详细步骤(附图)

    我一直用stm32 f407开发. 最近要学mqtt与阿里云联网之类的课程,因为没有做过,所以网上搜了一遍,结果全是stm32 f103c8t6的例程. 后来我就搬出我的f103最小系统版 (这个就为 ...

  9. 7月15日考试 题解(链表+状压DP+思维题)

    前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...

  10. 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    前言 今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的. 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的 ...