Email应用
# Email应用
# Email 应用的构成
Email应用的构成组件
- 邮件客户端(user agent)useragent
- 邮件服务器
- SMTP协议(Simple Mail Transfer Protocol)
# 邮件客户端
邮件客户端的作用
- 读、写Email消息
- 与服务器交互,收、发Email消息
常见的客户端
- Outlook, Foxmail, Thunderbird
- Web客户端
客户端示意图
# 邮件服务器
邮件服务器的作用
- 邮箱:存储发给该用户的Email
- 消息队列(message queue):存储等待发送的Email
邮件服务器示意图
# SMTP协议
SMTP 协议:邮件服务器之间传递消息所使用的协议
- 客户端:发送消息的服务器
- 服务器:接收消息的服务器
特点
- 使用TCP进行email消息的可靠传输
- 使用持久性连接
- 端口25
- 传输过程的三个阶段
- 握手
- 消息的传输
- 关闭
- 命令/响应交互模式
- 命令(command): ASCII文本
- 响应(response): 状态代码和语句
- Email消息只能包含7位ASCII码
与 HTTP 对比
- HTTP: 拉式(pull)
- SMTP: 推式(push)
- 都使用命令/响应交互模式
- 命令和状态代码都是ASCII码
- HTTP: 每个对象封装在独立的响应消息中
- SMTP: 多个对象在由多个部分构成的消息中发送
# Email 应用示例
应用示例
- 异步应用
SMTP 交互示例
# 尝试与 SMTP 交互
# Email 消息格式
SMTP:email消息的传输/交换协议
RFC 822:文本消息格式标准
- 头部行(header) -- 与 SMTP 命令不同
- To
- From
- Subject
- 消息体(body)
- 消息本身
- 只能是 ASCII 字符
示意图
# 多媒体扩展
MIME:多媒体邮件扩展 RFC 2045, 2056
- 通过在邮件头部增加额外的行以声明MIME的内容类型
示意图
# 邮件访问协议
示意图
邮件访问协议:从服务器获取邮件
- POP: Post Office Protocol [RFC 1939]
- 认证/授权(客户端
服务器) - 下载
- 认证/授权(客户端
- IMAP: Internet Mail Access Protocol [RFC 1730]
- 更多功能
- 更加复杂
- 能够操纵服务器上存储的消息
- HTTP:163, QQ Mail等
# POP 协议
认证过程
- 客户端命令
- User:声明用户名
- Pass: 声明密码
- 服务器响应
- +OK
- -ERR
示例
事务阶段
- List:列出消息数量
- Retr:用编号获取消息
- Dele: 删除消息
- Quit
示例
不同的模式
- “下载并删除”模式
- 用户如果换了客户端软件,无法重读该邮件
- “下载并保持”模式
- 不同客户端都可以保留消息的拷贝
POP3 是无状态的
# IMAP协议
特点
- 所有消息统一保存在一个地方:服务器
- 允许用户利用文件夹组织消息
- IMAP支持跨会话(Session)的用户状态:
- 文件夹的名字
- 文件夹与消息ID之间的映射等
编辑 (opens new window)