这篇文章上次修改于 378 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
计算机网络笔记3——电子邮件
电子邮件
对于电子邮件的发送,我们模拟一个用户A向用户B发送的情况。
其中有个用户代理的概念,我们此处可以将用户代理当做 邮件客户端例如qq邮箱,outlook等
我们引入的角色有用户A,用户B,代理用户A,代理用户B,邮箱服务器A,邮箱服务器B。其中邮箱服务器A管理A的邮件,邮箱服务器B管理B的邮件
- 用户A先使用代理用户A,完成内容和目标邮箱
- 代理用户A把A的邮件和目标交给邮箱服务器A(SMTP)
- 邮箱服务器A把邮件发往邮箱服务器B(SMTP)
- 代理用户B从邮箱服务器B中获取邮件(POP3/IMAP/HTTP)
SMTP并不经过中间邮件服务器,这个TCP连接会直接连接两方服务器。
其中,如果服务器B是关闭的,服务器A中将会有一个队列,一旦服务器A到B的发送失败,就会进入队列等待下一轮发送。
至于为什么用户A要使用SMTP而不直接给B,是因为我们不能确保用户A能直接访问到用户B。
客户端: HELO mail.example.com
服务器: 250 Hello mail.example.com
客户端: MAIL FROM:<sender@example.com>
服务器: 250 OK
客户端: RCPT TO:<receiver@example.com>
服务器: 250 OK
客户端: DATA
服务器: 354 Start mail input; end with <CRLF>.<CRLF>
客户端: Subject: Test email
This is a test email.
.
服务器: 250 OK: queued as 12345
客户端: QUIT
服务器: 221 Bye
CR代表回车 LF代表换行。
SMTP命令
SMTP协议由一系列命令和响应构成,常见的SMTP命令包括:
- HELO:标识发送方服务器,开始会话。
- MAIL FROM:指定邮件发送者地址。
- RCPT TO:指定邮件接收者地址。
- DATA:表示开始传输邮件内容。
- QUIT:终止会话。
SMTP与HTTP
- SMTP是推协议,HTTP是拉协议
- SMTP要求是ASCII,HTTP无限制
- SMTP将所有媒体对象放在单一文件,HTTP每个媒体对象会分别通过独立的HTTP请求来获取
邮件报文格式
邮件报文格式不同于SMTP命令
如同HTTP协议
每个首部必须有一个From:和 To: 首部行 例如
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life.
POP3/IMAP/HTTP
对于用户B要从邮箱服务器B中获取邮件,就不能使用推协议SMTP,需要使用拉协议,例如IMAP, POP3,HTTP
POP3
由RFC 1939进行定义
先在端口110进行TCP连接,经过“authorization”, “transaction”,“update” 三个阶段,分别是授权,事务,更新。
授权阶段:
- 客户端发送
USER <username>
命令,服务器响应+OK
表示用户名有效。 - 客户端发送
PASS <password>
命令,服务器响应+OK
表示身份验证成功。
事务阶段:
状态查询
STAT
:获取邮件数量和总大小。LIST
:获取每封邮件的编号和大小。
邮件操作
RETR <msg-number>
:下载指定编号的邮件。DELE <msg-number>
:标记指定编号的邮件为删除状态。NOOP
:空操作,用于保持连接。RSET
:重置所有已标记为删除的邮件。
更新阶段:
- 客户端发送
QUIT
命令。服务器响应+OK
,并删除所有标记为删除的邮件。
内容示例:
客户端: telnet mailserver 110
服务器: +OK Welcome to mail server
客户端: USER alice
服务器: +OK
客户端: PASS secret
服务器: +OK
客户端: STAT
服务器: +OK 2 320
客户端: LIST
服务器:
+OK 2 messages
1 120
2 200
.
客户端: RETR 1
服务器:
+OK 120 octets
邮件内容
.
客户端: DELE 1
服务器: +OK
客户端: QUIT
服务器: +OK Goodbye
缺陷:如果有两个设备使用POP3访问一个邮箱,在设备1删除了某个邮件后,设备2就无法下载访问了。
IMAP
允许用户在多个设备上同步和管理电子邮件。与POP3不同,IMAP支持更丰富的功能和更复杂的邮件管理操作。IMAP通常在TCP端口143上运行,使用SSL加密的IMAPS通常在TCP端口993上运行。
主要是文件夹管理,IMAP可以把报文和文件夹联系起来,管理者可以移动邮件到不同的文件夹,并且还可以创建删除,查找等。
IMAP的另一个重要特性是它具有允许用户代理获取报文某些部分的命令,只获取邮件中的部分内容,降低了宽带需求。
IMAP的操作过程也可以分为多个阶段:连接阶段、选择阶段、操作阶段和断开阶段。
- 连接阶段(Connection State)
客户端与服务器建立TCP连接,并进行初始的握手和身份验证。这是IMAP会话的初始阶段。
- 连接建立:客户端与服务器建立TCP连接。
- 身份验证:客户端通过发送用户名和密码进行身份验证,使用命令如
LOGIN <username> <password>
,服务器响应OK
表示身份验证成功。
- 选择阶段(Selected State)
在选择阶段,客户端选择一个邮件文件夹进行操作。IMAP支持多种文件夹(如收件箱、发件箱、草稿等),允许用户在不同文件夹之间切换。
- 选择文件夹:客户端使用
SELECT <folder>
命令选择一个邮件文件夹,服务器响应OK
并返回文件夹的状态信息,如邮件数量、未读邮件数量等。
- 操作阶段(Operational State)
在操作阶段,客户端可以执行各种命令来管理和操作邮件。这是IMAP会话的主要阶段。
-
邮件状态查询:
STATUS <folder>
:查询指定文件夹的状态信息。SEARCH <criteria>
:根据条件搜索邮件。FETCH <sequence> <items>
:获取指定邮件的内容和属性。EXAMINE <folder>
:类似于SELECT
,但以只读方式打开文件夹。
-
邮件操作:
COPY <sequence> <folder>
:将指定邮件复制到另一个文件夹。STORE <sequence> <item> <value>
:修改邮件的标志(如已读、未读)。EXPUNGE
:删除所有标记为删除的邮件。MOVE <sequence> <folder>
:将指定邮件移动到另一个文件夹。
- 断开阶段(Logout State)
在断开阶段,客户端发送LOGOUT
命令,服务器进行必要的更新操作并断开连接。
-
结束会话:
- 客户端发送
LOGOUT
命令。
- 客户端发送
-
服务器响应
OK
,并断开TCP连接。
IMAP命令
以下是一些常用的IMAP命令:
- LOGIN
- SELECT
:选择一个邮件文件夹进行操作。 - EXAMINE
:以只读方式选择一个文件夹。 - STATUS
:查询指定文件夹的状态信息。 - FETCH
- SEARCH
:根据条件搜索邮件。 - STORE
- COPY
- EXPUNGE:删除所有标记为删除的邮件。
- LOGOUT:结束会话并断开连接。
HTTP
也就是基于web的电子邮件,可以使用http协议从邮箱服务器拉取自己的邮件,方式更加丰富多样。(发送仍然是STMP)