START:

2.3 因特网中的电子邮件

电子邮件是一种异步通信媒介,包括具有附件、超链接、HTML格式文本和图片的报文。

因特网电子邮件系统,有三个主要组成部分:用户代理(user-agent),邮件服务器(mail server)和简单邮件传输协议(simple mail transfer protocol,SMTP)。

1. SMTP

SMTP 是电子邮件的主要应用层协议,它使用 TCP 可靠数据传输服务,有两个部分:运行在发送方和接收方服务器的客户端上。

SMTP 是使用 7 位 ASCII 码编码的,在传送前需要编码,传送后需要译码,异常麻烦。而 HTTP 并不需要这么做。


SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端。

SMTP 的发文方式
  1. 客户 SMTP 在 25 号端口建立一个到服务器 SMTP 的 TCP 连接;
  2. 连接成功,服务器和客户将会执行应用层的握手:
    1. 先相互介绍;
    2. SMTP 指示发送方和接收方的邮件地址。
  3. 客户发送报文;
  4. 如果有另外的报文发送,重复 2 - 3 过程;
  5. 指示 TCP 关闭。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
S: 220 www.example.com ESMTP Postfix
C: HELO mydomain.com
S: 250 Hello mydomain.com
C: MAIL FROM: <sender@mydomain.com>
S: 250 Ok
C: RCPT TO: <friend@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: Subject: test message
C: From:""< sender@mydomain.com>
C: To:""< friend@example.com>
C:
C: Hello,
C: This is a test.
C: Goodbye.
C: .
S: 250 Ok: queued as 12345
C: quit
S: 221 Bye

注释:

  • 在此例中,客户从邮件服务器 mydomain.com 向服务器 www.example.com 发送邮件。邮件名为 test message,内容为 Hello … good bye。最后以 . 结束一个报文。
  • 如果一个连接中有多个报文发送,在报文发送结束的时候再执行 quit 命令。

2.3.2 与 HTTP 相比

  • HTTP 是一个拉协议(pull protocol):即 TCP 连接由想接收文件方发起。而 SMTP 是推协议(push protocol),TCP 连接有文件上传方发起。

  • SMTP 要求每个报文用 7 bit ACSII 码格式,若非,须转码,而 HTTP 并无此类要求。

  • HTTP 把每个对象封装到自己的 HTTP 的响应报文中,而 SMTP 则是把所有报文对象放在一个报文中。

    • 存疑:查看 HTTP封装格式和 SMTP 的再去掉存疑。

2.3.3 邮件报文格式

!提示:邮件报文和 前文 SMTP 握手无关。

一个包含环境信息的首部位于报文体前,包括一系列的首部行,首部行与报文体用CRLF CRLF分割。

每个首部行都是字介石的,它是由关键字后跟冒号以及其值组成的。

每个首部行必须包括一个 From:To:首部行。

一个典型的报文如下:

1
2
3
From: alice@@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of the life.

在首部之后,跟一个空白行,之后是以 ACSII 码构成的报文体。

2.3.4 邮件访问协议

用户通常在本地 PC 上运行一个用户代理程序,而它访问存储在总是保持在线的共享邮件服务器上的邮箱。

假设是 ALICE 向 BOB 发送了一封邮件,以下是过程:
Alice 的代理—SMTP—>Alice 的邮件服务器—SMTP—>BOB 的邮件服务器—POP3 IMAP 或 HTTP —> bob的代理

因为取报文是拉操作,所以需要引入邮件访问协议来解决,常见的有:

  1. 第三版邮局协议(POP3);
  2. 因特网邮件访问协议(IMAP);
  3. HTTP。
1. POP3

用户代理打开端口 110,POP3 开始工作,随着建立 TCP 连接,POP3 按照三个阶段进行工作:

  1. 特许;
  2. 事务处理;
  3. 更新。

特许阶段,代理发送明文的账号密码来鉴别用户;

在事务处理阶段,用户代理取回报文,并对报文进行标记(删除标记、取消删除标记、获取统计信息);

在更新阶段,出现在用户代理发送 quit 命令之后,邮件服务器会删除被标记为删除的报文。

在事物处理过程中,服务器对于客户发出的命令进行回应,通常有:

1
2
+ OK(有时加上服务器到客户的数据)
- ERR 出错

特许阶段有两个主要命令:

1
2
3
4
user bob
+ OK
pass hungry
+ OK you can logged in

事物处理过程中,一般有下载并删除和下载并保留方式,并且用户代理发出的命令序列取决于被配置为哪种。

下载并删除执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
c: list
s: 1 498
s: 2 912
s: .
c: retr 1
s: (data)
s: .
c: dele 1
c: retr 2
s: (data)
s: .
c: dele 2
c: quit
c: +OK

用户代理请求服务器列出存储报文的长度,接着客户要求取回并删除每一个邮件,在执行 quit 命令后,POP3 进入更新阶段,删除邮件 1 2。

在会话期间,POP3 服务器保存了一些状态信息,但并不传输。

POP3 只能将文件取回本地,并无法在服务器端建立层次文件夹。

2. IMAP

可以在远程建立文件夹,并把邮件从一个文件夹移入另一个文件夹中,还可以远程查询。

IMAP维护了绘画中的状态信息。

IMAP允许用户代理只获取报文中的一部分内容,而非全部,比如只看文本而不下载图片。

3. HTML

目前的主流方式。

一般这样来传邮件:

alice -http->server-IMAP->server-HTTP->bob。

相关文章
评论
分享
Please check the post_relate setting in config.yml of hexo-theme-Annie! You should make sure 'postsEnable == true' and the number of site posts greater than 1.
Please check the comment setting in config.yml of hexo-theme-Annie!