@Dale-Lin
2023-03-09T16:50:59.000000Z
字数 1141
阅读 151
计算机网络
Email 由三部分组成:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。
假设 Alice 发送 Email 给 Bob。User agent 允许用户阅读,回复,转发、保存和撰写报文。微软的 Outlook 和 Apple Mail 是 Email 用户代理的例子。当 Alice 完成邮件撰写时,她的邮件代理向其 mail server 发送邮件,此时邮件放在服务器的外出报文队列中。当 Bob 要阅读报文时,他的 user agent 在其邮件服务器的邮箱中取的该报文。
每个接收方(如Bob)在其中的某个 mail server 上有一个邮箱(mailbox)。如果 Alice 的服务器不能将邮件交付给 Bob 的服务器,Alice 的 mail server 会在一个报文队列(message queue)中保持该报文并在一定间隔后再次尝试;如果几次尝试后仍不能成功,Alice 的 mail server 就会通知发送失败。
SMTP 是因特网电子邮件的核心。假设 Alice 想给 Bob 发送一份简单的 ASCII 报文。
Alice 调用她的 user agent 并提供 Bob 的邮件地址,撰写报文,然后指示 user agent 发送该报文。
Alice 的 user agent 把报文通过 SMTP 发给她的 mail server,mail server 把报文放在报文队列中。
Alice 的 mail server 上的 SMTP 客户端发现了报文队列中的这个报文,它就创建一个到运行在 Bob 的 mail server 上的 SMTP 服务器的 TCP 连接。
在经过一些初始的 SMTP 握手后,SMTP 客户端通过该 TCP 连接发送 Alice 的报文。
在 Bob 的 mail server 上,SMTP 的服务器端接收该报文。Bob 的 mail server 将该报文放入 Bob 的邮箱中。
Bob 方便的时候,调用 user agent 阅读该报文。
实际上,SMTP 被设计成将 email 从一台主机推到另一台主机。不同的是 Bob 作为接收方,Bob 的 user agent 不是通过 SMTP 获取报文。因为取报文是一个 pull 操作,而 SMTP 是一个 push 协议。通过引入一个特殊的邮件访问协议来完成接收,例如第三版的邮局协议(Post Office Protocol——Version 3, POP3)、因特网邮件访问协议(Internet Mail Access Protocol,IMAP)以及 HTTP。