因特网电子邮箱系统主要由用户代理(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. Android Zero (基础介绍篇)

    开发Android首先你得先配置好环境,配置的文章网上一大把,这里就不重复造轮子说了,配置好JAVA下载好AndroidStudio后我们先对基本的项目结构做一下了解! 首先介绍下你必须得知道的文件夹 ...

  2. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

  3. A - A Simple Problem with Integers (线段树的区间修改与区间查询)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  4. pandas_处理异常值缺失值重复值数据差分

    # 处理异常值缺失值重复值数据差分 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("dis ...

  5. PHP strtoupper() 函数

    实例 把所有字符转换为大写: <?php高佣联盟 www.cgewang.comecho strtoupper("Hello WORLD!");?> 定义和用法 str ...

  6. IC行业常见用语

    https://www.cnblogs.com/yeungchie/ Active Devices 有源器件 MOSFET Metal-Oxide-Semicoductor Field-Effect ...

  7. Java垃圾回收原来这么简单

    什么是垃圾回收? 垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露.有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和 ...

  8. [转]为什么阿里巴巴要禁用Executors创建线程池?

    作者:何甜甜在吗 链接:https://juejin.im/post/5dc41c165188257bad4d9e69 来源:掘金 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executo ...

  9. 包管理Go module的使用

    我用 Golang 的 Web 框架 Iris 写项目时,发现下载依赖老是失败原因是被墙了(可以参考上一篇 https://www.cnblogs.com/ser0632/p/11374790.htm ...

  10. requests-html库轻体验-HTMLSession下载表情包

    requests-html实战,HTMLSession下载斗图啦最新表情包 前言 在这篇文章之前,我写了requests入门实践02_下载斗图拉最新表情包用正则表达式提取url,来下载斗图啦最新表情包 ...