因特网电子邮箱系统主要由用户代理(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. P4221 [WC2018]州区划分 无向图欧拉回路 FST FWT

    LINK:州区划分 把题目中四个条件进行规约 容易想到不合法当前仅当当前状态是一个无向图欧拉回路. 充要条件有两个 联通 每个点度数为偶数. 预处理出所有状态. 然后设\(f_i\)表示组成情况为i的 ...

  2. 剑指 Offer 53 - II. 0~n-1中缺失的数字

    本题 题目链接 题目描述 我的题解 二分法 思路分析 排序数组中的搜索问题,首先想到二分法 当nums[center] > center 时,缺少的数在左区间 当nums[center] = c ...

  3. angularjs脏检查

    angularjs实现了双向绑定,与vue的defineProperty不同,它的原理在于它的脏检查机制,以下做了一些总结: angular.js介绍 AngularJs是mvvm框架,它的组件是vm ...

  4. LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci 题解

    题目传送门 如果之前推过斐波那契数列前缀和就更好做(所以题目中给出了). 斐波那契数列前缀和题目链接 先来推一下斐波那契数列前缀和: \[\sum\limits_{i=1}^nf(i) \] 其中 \ ...

  5. SparkBench安装使用入门

    SparkBench安装以及快速开始 欢迎关注我的GitHub~ 本指南假定已经可以正常使用Spark 2.x,并且可以访问安装它的系统. 系统环境 CentOS 7.7.1908 Ambari-Sp ...

  6. demo2动态加载显示商品详情页

    /* 要求:实现 头像+昵称(多余7位用...) 商品图片(根据商品实际的图片的大小进行动态的展示.按照一定的比例进行展示.) 产品简介.产品简介在商品图片的下边.并跟随商品图片的大小进行动态的收缩或 ...

  7. 003_对go语言中的工作池代码练习的一些思考和改进

    在进行工作池的代码练习时候,我发现了一个有趣的事情,首先看下面一段代码: package main import "fmt" import "time" fun ...

  8. 云服务器远程连接mysql数据库

    首先需要在云服务器上,下载安装好mysql与Navicat. mysql下载好以后,打开云端的开始,找到mysql的命令窗,进入输入自己的mysql密码,稍等片刻进入mysql数据库 进入之后输入下列 ...

  9. Jupyter PPT

    安装 pip install jupyter pip install RISE jupyter-nbextension install rise --py --sys-prefix jupyter-n ...

  10. maven配置问题

    今天配置maven环境,最后总是显示 百度好多方法,都没解决,最后查看了一下maven目录下的mvn.cmd文件发现里面的jdk引用名用的是%JAVA_HOME%..... 看完就发现问题了,自己装了 ...