简单邮件传输协议
编辑简单邮件传输协议(SMTP)是一种通信协议用于电子邮件传输。作为Internet标准,SMTP在1982年由RFC 821首次定义,并在2008年由RFC 5321更新为扩展的SMTP添加项,这是当今广泛使用的协议种类。邮件服务器和其他邮件传输代理使用SMTP发送和接收邮件。SMTP服务器通常在端口号 25 上使用传输控制协议。
用户级电子邮件客户端通常仅将SMTP用于将消息发送到邮件服务器以进行中继,并且通常根据RFC 8314在端口587或465上将外发电子邮件提交到邮件服务器。为了检索消息,IMAP和POP3是标准的,但是专有服务器也经常实现专有协议,例如Exchange ActiveSync。
邮件处理模型
编辑电子邮件是由邮件客户端,通过SMTP在TCP端口587 上提交到邮件服务器(邮件提交代理、MSA)的。大多数邮箱提供商仍允许在传统端口25上提交邮件。MSA将邮件传递到其邮件传输代理(邮件传输代理、MTA)。通常,这两个代理是在同一台计算机上以不同选项启动的同一软件的实例。本地处理既可以在单台计算机上完成,也可以在多台计算机上拆分;一台计算机上的邮件代理进程可以共享文件,但是如果处理在多台计算机上,它们将使用SMTP在彼此之间传输邮件,其中每台计算机都配置为将下一台计算机用作智能主机。每个进程本身就是一个MTA(SMTP服务器)。
边界MTA使用DNS查找收件人域的MX(邮件交换器)记录(@右边的电子邮件地址部分)。MX记录包含目标MTA的名称。根据目标主机和其他因素,发送MTA选择收件人服务器并连接到该服务器以完成邮件交换。
消息传输可以发生在两个MTA之间的单个连接中,也可以发生在通过中间系统的一系列跃点中。接收SMTP服务器可以是最终目的地,也可以是中间“中继”(即它存储并转发邮件)或“网关”(即它可以使用SMTP以外的某种协议转发邮件)。每一跳都是对消息负责的正式交接,由此接收服务器必须传递消息或正确报告失败。
最后一跳接受传入的消息后,会将其交给邮件传递代理(MDA)进行本地传递。MDA以相关的邮箱格式保存邮件。与发送一样,可以使用一台或多台计算机来进行接收,但是在上图中,MDA被描述为靠近邮件交换箱的一个箱。MDA可以将邮件直接传递到存储,也可以使用SMTP或其他协议(例如本地邮件传输协议(LMTP))通过网络转发它们,SMTP是为此目的而设计的SMTP。
一旦传递到本地邮件服务器,邮件将被存储以供已认证的邮件客户端(MUA)批量检索。最终用户应用程序(称为电子邮件客户端)使用Internet消息访问协议(IMAP)检索邮件,该协议既可以方便访问邮件并管理存储的邮件,也可以使用通常使用传统mbox邮件的邮局协议(POP)。文件格式或专有系统,例如Microsoft Exchange / Outlook或Lotus Notes / Domino。Webmail客户端可以使用这两种方法,但是检索协议通常不是正式的标准。
SMTP定义邮件传输,而不是邮件内容。因此,它定义了邮件信封及其参数,例如信封发件人,但不定义标题(跟踪信息除外),也不定义消息本身。STD 10和RFC 5321定义SMTP(信封),而STD 11和RFC 5322定义消息(标头和正文),正式称为Internet消息格式。
协议概述
编辑SMTP是一种面向连接的,基于文本的协议,其中,邮件发送者通过发出命令字符串并通过可靠的有序数据流通道(通常是传输控制协议(TCP)连接)提供必要的数据来与邮件接收者进行通信。一个SMTP会话包括命令发起的一个SMTP 客户端(起始剂、发件人或发射器),并从相应的SMTP响应服务器,从而使会话被打开,并且会话参数被交换。会话可能包括零个或多个SMTP事务。一个SMTP交易 由三个命令/答复序列组成:
- MAIL命令,用于建立返回地址,也称为返回路径、反向路径、退回地址、mfrom或信封发件人。
- RCPT命令,用于建立邮件的收件人。该命令可以发出多次,每个收件人一次。这些地址也是信封的一部分。
- DATA表示消息文本的开始; 邮件的内容,而不是信封。它由消息标题和由空行分隔的消息正文组成。DATA实际上是一组命令,服务器会回复两次:一次是对DATA命令本身,以确认它已准备好接收文本,第二次是在数据结束序列之后,接受还是拒绝。
除了对DATA的中间答复外,每个服务器的答复可以是肯定的(2xx答复代码)或否定的。否定答复可以是xxx性的(5xx码)或短暂的(4xx码)。一个拒绝是xxx性故障,客户机应该发送退回邮件给它收到了来自服务器。甲降是一个正响应,随后消息丢弃,而不是递送。
启动主机SMTP客户端可以是功能上被标识为邮件用户代理(MUA)的最终用户的电子邮件客户端,也可以是中继服务器的邮件传输代理(MTA),即充当SMTP客户端的SMTP服务器,在相关会话中,以便中继邮件。功能齐全的SMTP服务器维护消息队列,以重试导致短暂故障的消息传输。
MUA 从其配置中知道传出邮件 SMTP服务器。中继服务器通常通过查找每个收件人的域名的MX(邮件交换)DNS资源记录来确定要连接的服务器。如果未找到MX记录,则由符合标准的中继服务器(并非全部)查找A记录。中继服务器也可以配置为使用智能主机。中继服务器在SMTP 的“ 众所周知的端口 ”(端口 25)上或与MSA的端口587 上启动到服务器的TCP连接。MTA和MSA之间的主要区别在于,连接到MSA需要SMTP身份验证。
SMTP与邮件检索
SMTP仅是一种传送协议。在正常使用中,邮件在到达时被“推送”到目标邮件服务器(或下一跳邮件服务器)。邮件是基于目标服务器而不是目标地址的单个用户进行路由的。其他协议,例如邮局协议(POP)和Internet消息访问协议(IMAP),是专门设计用于供单个用户检索消息和管理邮箱的。为了允许间歇性连接的邮件服务器按需从远程服务器提取邮件,SMTP具有在远程服务器上启动邮件队列处理的功能。POP和IMAP是不适合用于间歇连接的计算机中继邮件的协议;它们被设计为在最终交付后运行,当已除去对邮件中继的正确操作至关重要的信息(“邮件信封”)时。
远程消息队列开始
远程消息队列启动使远程主机可以开始处理服务器上的邮件队列,因此它可以通过发送相应的命令来接收发往该服务器的消息。原始TURN
命令被认为是不安全的,并在RFC 1985中使用ETRN命令进行了扩展,该命令使用基于域名系统信息的身份验证方法可以更安全地运行。
外发邮件SMTP服务器
编辑一个电子邮件客户端需要知道它的最初的SMTP服务器的IP地址,这必须给出其配置(通常为一个给定的部分DNS名称)。该服务器将代表用户传递外发消息。
寄出邮件服务器访问限制
服务器管理员需要对哪些客户端可以使用服务器施加一些控制。这使他们能够应对滥用行为,例如垃圾邮件。两种解决方案已被普遍使用:
- 过去,许多系统都根据客户端的位置施加使用限制,仅允许IP地址为服务器管理员控制的客户端使用。禁止从任何其他客户端IP地址使用该地址。
- 现代SMTP服务器通常提供一种替代系统,该系统要求在允许访问之前通过凭据对客户端进行身份验证。
按位置限制访问
在此系统下,ISP的SMTP服务器将不允许ISP网络外部的用户访问。更准确地说,服务器可能只允许访问具有ISP提供的IP地址的用户,这相当于要求他们使用同一ISP连接到Internet。移动用户通常可能不在其普通ISP的网络上,然后会发现发送电子邮件失败,因为无法再访问已配置的SMTP服务器选项。
该系统具有多种变体。例如,一个组织的SMTP服务器可能仅向同一网络上的用户提供服务,通过防火墙来强制执行此服务,以阻止更广泛的Internet上的用户访问。或者服务器可以对客户端的IP地址执行范围检查。这些方法通常由公司和机构(例如大学)使用,它们为出站邮件提供SMTP服务器,仅在组织内部使用。但是,这些机构现在大多数都使用客户端身份验证方法,如下所述。
如果用户是移动用户,并且可能使用不同的ISP连接到Internet,则这种使用限制非常繁琐,并且更改已配置的出站电子邮件SMTP服务器地址是不切实际的。非常需要能够使用不需要更改的电子邮件客户端配置信息。
客户端身份验证
现代SMTP服务器通常要求在允许访问之前通过凭据对客户端进行身份验证,而不是如前所述按位置限制访问。这种更灵活的系统对移动用户友好,并允许他们有固定配置的出站SMTP服务器选择。SMTP身份验证(通常缩写为SMTP AUTH)是SMTP的扩展,目的是使用身份验证机制登录。
打开继电器
在更广泛的Internet上可访问并且不强制执行此类访问限制的服务器称为开放中继。现在,通常认为这是值得列入黑名单的不良做法。
端口
邮件服务器之间的通信通常使用为SMTP指定的标准TCP端口25。
但是,邮件客户端通常不使用此端口,而是使用特定的“提交”端口。邮件服务通常接受来自以下任一客户的电子邮件提交:
- 587(提交),在RFC 6409(以前为RFC 2476)中已正式化
- 465在RFC 2487之后不推荐使用此端口,直到RFC 8314发布为止。
端口2525和其他端口可能由某些单独的提供商使用,但从未得到官方的支持。
现在,大多数Internet服务提供商都将其客户的所有传出端口25流量阻止为反垃圾邮件措施。由于同样的原因,企业通常会将防火墙配置为仅允许来自其指定邮件服务器的传出端口25流量。
扩展的简单邮件传输协议
编辑原始SMTP协议仅支持未经身份验证的未加密ASCII文本通信,容易受到中间人攻击,欺骗和垃圾邮件的侵扰,并且要求在传输之前将任何二进制数据编码为可读文本。许多可选扩展指定了解决这些问题的各种机制。
可选扩展发现
客户端使用EHLO
问候语代替原始问候语HELO
(上面的示例)来学习服务器支持的选项。HELO
仅当服务器不支持SMTP扩展名时,客户端才使用。
现代客户端可能会使用ESMTP扩展关键字SIZE
来查询服务器以获取将被接受的xxx邮件大小。较旧的客户端和服务器可能会尝试传输尺寸过大的消息,这些消息将在消耗网络资源(包括按分钟付费的网络链接连接时间)后被拒绝。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/112505/