开发者生态
morning
关于电子邮件的一些知识
摘要
A bit about email 2026-11-06 — 2026-11-08 Before you torch and pitchfork me, I'm aware most of this is simplified and doesn't go into edge cases, even though the internet is composed entirely of edge ...
the
and
MTA
email
message
mail
agent
different
MUA
The
2026-11-09
1 阅读
约6分钟阅读
vinhnx
字号:
关于电子邮件的一些信息 2026-11-06 — 2026-11-08 在你火炬和干草叉我之前,我知道大部分内容都是简化的,不会涉及边缘情况,即使互联网完全由边缘情况组成。否则,我会写一整本书。首先,一些术语;典型的电子邮件在到达收件人的途中会经过许多不同的组件: 1. 发件人的 MUA [通过端口 465 上的 SMTP] 2. 发送 MSA 3. 发送 MTA [通过端口 25 上的 SMTP] 4. 接收 MTA 5. 接收 LDA 和邮件存储 [通过 IMAP] 7. 接收者的 MUA(这些不一定都是不同的机器,甚至不同的程序,但命名很有帮助)每个步骤。)邮件用户代理 (MUA) 在用户的计算机上运行,用于发送或阅读消息。假设他们发送了一些内容:该消息将被上传到提交代理 (MSA),提交代理 (MSA) 在移交给邮件传输代理 (MTA) 之前检查用户的密码。传输代理的工作是与其他邮件服务器通信并将邮件传送到接收方的 MTA。收到后,它会被交给本地递送代理 (LDA) 进行存储,直到收件人检查其电子邮件为止。名称“LDA”是非标准的,但我使用它是为了避免四个不同的缩写只有一个字母不同。采用这种结构的原因是,当系统设计时(1980 年左右),大多数组织只能买得起一台服务器。维护是一项全职工作,更新通常需要多天的停机时间。连接良好的计算机可能具有专用的个位数兆位/秒链路,并且可以正常工作一半的时间。这强制了 MTA 和 MUA 的区别:如果设置电子邮件时收件人的服务器未启动,则发送 MTA 将保存邮件并稍后重新尝试传递。这样,短暂的中断就不会导致邮件被退回。由于邮件客户端是用户运行的交互式程序,因此需要一个单独的消息存储来保存电子邮件直到可以阅读。大多数 MTA 配置为在五天内继续重试消息,通常采用指数退避:我的 MTA 将在第一次失败后等待 5 分钟,并在长时间中断时将间隔增加到一小时。 MSA 和 LDA 一直以某种形式存在,但当人们开始从自己的计算机访问电子邮件或远程登录服务器时,它们变得更加复杂。 SMTP 大多数通信通过简单邮件传输协议进行,包括 MTA-MTA 传送。为了缩小范围,我将假装自己是一名 MTA,正在向 blog@maurycyz.com 发送电子邮件。第一步是查找该域的接收 MTA:# dig MX maurycyz.com [snip] maurycyz.com。 300 IN MX 1smallcrow.com。 [snip]#挖掘smallcrow.com [snip]smallcrow.com。 300 IN A 65.109.172.162 [snip] 电子邮件足够旧,可以拥有自己的专用 DNS 记录,而不是使用子域黑客或 TXT 滥用。该数字具有优先级(越小越高),如果指定多个主机,则使用该数字:大型电子邮件提供商将拥有多个服务器以确保及时发送。 SMTP 是一种相对简单的基于文本的协议。一个问题是大多数邮件服务器都需要 CRLF 作为数据终止符。这通常可以使用 ctrl-m 发送,但使用自动插入盒式返回字节的工具更容易: # telnet telnet> set crlf 将发送回车作为 telnet 。 telnet> 打开smallcrow.com 25 正在尝试65.109.172.162...已连接到smallcrow.com。转义字符是“^]”。 220smallcrow.com ESMTP Postfix HELO 无处 250smallcrow.com MAIL FROM: 250 2.1.0 Ok RCPT TO: 250 2.1.5 Ok DATA 354 以 . 结束数据 From: To: 你好,世界。 。 250 2.0.0 Ok:作为 C870D7CD93 排队 QUIT 221 2.0.0 Bye 发送的每一行都是一个命令,远程服务器响应该命令,使用一个三位数,后跟一个人类可读的解释。 200 响应意味着它有效,300 是“继续...”,400 表示临时错误,告诉发件人稍后再试,500 错误表示电子邮件应因无法送达而被退回。 (如果这看起来与 HTTP 类似,那并非巧合。Web 的许多内容,包括其标头语法,都是从 SMTP 中继承的)第一个命令始终是 HELO(或 EHLO),后面跟着发送 MTA 的主机名。这通常与电子邮件地址中的主机名不同,但许多提供商要求它与发件人的 IP 地址匹配。 。接下来的两个 MAIL FROM 和 RCPT TO 指定要传送到的地址以及任何故障通知的地址。退回邮件通常是在错误发生位置上一级生成的:在大多数情况下,接收 MTA 出现问题并向发送 MTA 发送错误代码,但此时 MSA 已断开连接,从而强制发送电子邮件通知。这些通知本身使用空的 MAIL FROM 来避免无限循环。一旦指定并接受了地址,就会发送 DATA 命令,然后发送实际消息。时间
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱