RFC821-简单邮件传输协议(SMTP)中文版-0_PHP
SMTP
本文出自: 作者: (2001-11-23 07:08:00)1. 介绍
简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传
送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C
和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用
的术语。
SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了
进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络
的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直
接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮
件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮
件可以通过不同网络上的主机接力式传送。
2. SMTP模型
SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接
收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中
间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传
送。
一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果
SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件
是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出
拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收
到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应
答。
SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下
时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个
传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能
力,它必须拥有最终目的主机地址和邮箱名称。
MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转
发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径
(它用于发生错误时返回邮件)。
当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一
份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一
个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命
令和应答在第四节。
命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或
两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户
名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,
主机名称对大小写不敏感。
命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7
位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参
数会由一些类似于语言的字符串表示出来,如"
这里尖括号表示这是一种类似于语言的变量。
3. SMTP过程
本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为
发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终
端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一
部分命令和应答的序列,完整的例子见附录F。
3.1. MAIL
在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或
更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件
内容,最后邮件内容指示符确认操作。
过程中的第一步是MAIL命令,包括源邮箱。
此命令告诉接收者新的发送操作已经开始,请复位所有状态表和缓冲区。
它给出反向路径以进行错误信息返回。如果请求被接收,接收方返回一个
250 OK应答。
向路由,其中的第一个主机就是发送此命令的主机。
过程中的第二步是发送RCPT命令。
RCPT
此命令给出向前路径标识接收者,如果命令被接收,接收方返回一个
250 OK应答,并存储向前路径。如果接收者未知,接收方会返回一个550 Failure
应答。此过程可能会重复若干次。
第一个主机就是接收命令的主机。 过程中的第三步是发送DATA命令。
DATA
如果命令被接收,接收方返回一个354 Intermediate应答,并认定以下的
各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。
因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可
以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在
接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。
注意:邮件内容包括如下提示:Date, Subject, To, Cc, From。
邮件内容指示符确认邮件操作并告知接收者可以存储和再发送数据了。如
果此命令被接收,接收方返回一个250 OK应答。DATA命令仅在邮件操作未完成
或源无效的情况下失败。
上面所述的过程是一个发送操作。这些命令只能以上面的顺序使用。下例
表示了在一个发送操作中这些命令的使用。
SMTP过程例子 此例是在Alpha.ARPA主机的Smith发送邮件给Beta.ARPA主机
的Jones,Green和Brown的,这里假定主机Alpha与主机Beta直接相连。
S: MAIL FROM:
R: 250 OK
S: RCPT TO:
R: 250 OK
S: RCPT TO:
R: 550 No such user here
S: RCPT TO:
R: 250 OK
S: DATA
R: 354 Start mail input; end with
S: Blah blah blah...
S: ...等等
S:
R: 250 OK
此信被前两个人接收,而第三个人在此主机上没有邮箱。
3.2. 转发
下面是一些
的地址的例子。在这些例子中,下列应答之一应该允许发送方与获得正确地址。
251:用户不在本地;将向前发送到
这个应答意味着,接收方SMTP知道用户的邮箱在另外的主机上,而且意味
着将在未来使用正确的转向路径。请注意,主机或者用户,或者它们两者是不
同的。接收方负责传送消息。
551 :用户非本地,请尝试
这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用
了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接
收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发
送者返回错误信息。 下例显示了这些响应的应用。
转发的例子
S: RCPT TO:
R: 251 User not local; will forward to
或者
S: RCPT TO:
R: 551 User not local; please try
3.3. 确认和扩展
SMTP提供了另外的确认用户名和扩展邮件列表的功能。这些功能由VREF和
EXPN命令完成,它们都以字符串为参数。对于VREF命令,字符串参数指的是用
户名,对此命令的响应要包括用户的命名和用户的邮箱。对于EXPN命令,字符
串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用
户的命名和他们的邮箱。
“用户名”是一个多余的项目,它是故意被加上的。如果主机采用VREF命
令和EXPN命令,最后本地邮箱必须提供用户名使它被主机确认。如果主机选择
由另外的字符串作为用户名,也是允许的。
在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数
据结构可能包括两种类型的入口。如果要发出对邮件列表的确认,应该给出确
定响应。在接收到这个消息后,主机将把邮件传送到列表上所有的地址上去,
如果没有接收到确定响应,就会报告错误。例如,
"550 That is a mail list, not a user name"。如果请求用于扩展一个用户名,
可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到确定响应,
就会报告错误。(例如, "550 That is a user name, not a mailing list")。
在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱。
在模糊请求的情况下,例如"VRFY Smith",这里两个Smith的响应必须是
"553 User ambiguous"。
确认用户名的情况如下例所示:例3:
确认用户名
S: VRFY Smith R: 250 Fred Smith
或者
S: VRFY Smith
R: 251 User not local; will forward to
或者
S: VRFY Jones
R: 550 String does not match anything.
或者
S: VRFY Jones
R: 551 User not local; please try
或者
S: VRFY Gourzenkyinplatz
R: 553 User ambiguous.
邮箱列表要求多个响应的情况如下例所示:
S: EXPN Example-People
R: 250-Jon Postel
R: 250-Fred Fonebone
R: 250-Sam Q. Smith
R: 250-Quincy Smith
R: 250-
R: 250
或者
S: EXPN Executive-Washroom-List
R: 550 Access Denied to You.
VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限
制了。在一些系统上,EXPN命令的参数可能是一个包含邮件列表的文件名,
但是在Internet上有许多不同的文件结构。
VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求
被在传送间实现。
3.4. 发送信件(mailing)和获得信件(sending)
SMTP的主要目的是将邮件发送到用户的邮箱中。由一些主机提供的类似
的功能是把邮件送至用户的终端(如果用户正打开终端)。将邮件送到用户
的邮箱中称为发送信件(mailing);而送至用户终端则称之为获得信件
(sending)。因为在一些主机上,这两者的实现十分类似,所以它们同时
被放入了SMTP中。然而,获得信件命令在SMTP的最小实现中是没有的。用户
应该具有控制向终端上写信息的能力。大部分主机允许用户接受或者拒绝类
似的信息。
下面三个命令被定义来支持获得信件。它们被用于邮件命令而不是MAIL
命令,指示接收SMTP这种操作的特殊意义:
SEND
SEND命令要求邮件内容直接传送到用户终端。如果用户未打开终端(或
者未接收终端信息),450响应将返回一个RCPT命令。如果信息被成功发送,
此操作成功。
SOML
Send或者MaiL命令要求将邮件内容直接发送到用户的终端上(如果用户
在终端上)。如果用户不在终端上,邮件内容直接进入邮箱。如果邮件被发送
到用户终端或者用户信箱,发送操作成功。
SAML
Send和MaiL命令要求邮件内容直接发送到用户终端上(如果用户在终端上)。
不管怎么样,信件都会进入信箱。如果信件进入信箱,发送操作成功。
用于MAIL命令的响应和这些命令的响应相同。
3.5. 打开和关闭
当打开传送通道时,要交换一些信息以确定双方的身份。以下的命令是
用于打开和关闭的:
HELO
QUIT
在HELLO命令中,主机自己发送命令,此命令可以被解释为:“你好,
我是XX”。
打开联结的例子
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
关闭联结的例子
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
3.6. 转发
转发路径可能是如下格式:"@ONE,@TWO:JOE@THREE",在这里,ONE,TWO
和THREE是主机。这种格式用于强调地址和路径的区别。邮箱是绝对地址,路
径是关于如何到达的信息。这两个概念不应该被混淆。
概念上,转发路径的元素被移动到回复路径作为从一个SMTP服务器到另一
个SMTP服务器的信息。回复路径是一个反向数据源路径,例如从当前信息的位
置到发起者的位置。当一个SMTP服务器从转发路径中删除自己的标记并将它插
入到回复路径中时,它必须使用它发送环境能够理解的名称来进行,以防它的
名称在不同的环境中被理解为不同的名字。
如果当SMTP接收到信息的转发路径的第一个元素不是此SMTP的标记时,此
元素不从转发路径中删除,而被用来决定下一个应该发送到的SMTP服务器。在
任何情况下,SMTP都将自己的标记加入反向路径中。
使用源路径时,接收SMTP接收转发的邮件并发送到另一接收SMTP服务器上。
接收服务器可以接受或拒绝转发本地用户的邮件。接收SMTP通过将它自己的标记
从转发路径移至回复路径的开始处来改变命令参数。这时,接收SMTP变成了发
送SMTP,也就建立了到下一个转发路径中SMTP的通道,然后,它向这个SMTP发
送邮件。
在回复路径上的头一个主机应是发送SMTP命令的主机,在转发路径上第一个
主机应是接收SMTP命令的主机。
注意:转发路径和回复路径出现在SMTP命令和应答中,但不一定要出现在信
息中。也就是说,没有必须要这样的路径特别这种格式出现在信息头的"To:",
"From:"和"CC:"等域中。
如果SMTP服务器接受了转发任务,但后来它发现因为转发路径不正确或者
其它原理无法发送邮件,它必须建立一"undeliverable mail"信号,将它此信号
送到此信的发主者那里。
此信号必须是从此主机的SMTP服务上发出的,当然了,此服务器不应该再报
告出错信息的错误。一种阻止这种出错报告循环的情况是在信号的邮件命令的回
复路径上置空。在传送此信息时,允许将回复路径也置为空。一个MAIL命令后的
回复路径为空表现为如下形式:
MAIL FROM:
下例中显示了不可传送的邮件信息。此信息是对从HOSTW上的JOE发出的邮件
经过在HOSTX需要经过HOSTZ到达HOSTY时出错的回应。我们看到的例子是在HOSTX
和HOSTY之间发生的。
不可传送邮件信息的例子
S: MAIL FROM:
R: 250 ok
S: RCPT TO:
R: 250 ok
S: DATA
R: 354 send the mail data, end with .
S: Date: 23 Oct 81 11:22:33
S: From: SMTP@HOSTY.ARPA
S: To: JOE@HOSTW.ARPA
S: Subject: Mail System Problem
S:
S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.
S: HOSTZ.ARPA said this:
S: "550 No Such User"
S: .
R: 250 ok

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Windows11的控制台中是否缺少Outlook郵件圖示?這一意外情況在一些依賴OutlookMail滿足通訊需求的個人中引起了困惑和擔憂。為什麼我的Outlook電子郵件沒有顯示在控制台中?控制台中沒有Outlook郵件圖示可能有幾個可能的原因:Outlook未正確安裝。從MicrosoftStore安裝Office應用程式不會將郵件小程式新增至控制台。 mlcfg32.cpl檔案在控制面板中的位置遺失。登錄中的mlcfg32.cpl檔案路徑不正確。作業系統目前未配置為運行此應用程式

硬碟序號是硬碟的一個重要標識,通常用於唯一標識硬碟以及進行硬體識別。在某些情況下,我們可能需要查詢硬碟序號,例如在安裝作業系統、尋找正確裝置驅動程式或進行硬碟維修等情況下。本文將介紹一些簡單的方法,幫助大家查詢硬碟序號。方法一:使用Windows命令提示字元開啟命令提示字元。在Windows系統中,按下Win+R鍵,輸入"cmd"並按下回車鍵即可開啟命

透過sudo指令,使用者可以在提升權限模式下執行指令,而無需切換到超級使用者模式。本文將介紹如何在Windows系統中模擬類似sudo指令的功能。什麼是數道司令部? Sudo(「超級使用者do」的縮寫)是一種命令列工具,允許基於Unix的作業系統(如Linux和MacOS)的使用者以提升的權限執行命令,這些權限通常是管理員所擁有的。在Windows11/10中執行SUDO命令然而,隨著最新發布的Windows11Insider預覽版推出,Windows用戶現在也可以體驗到這項功能。這項新功能使用戶能夠

如果您發現在使用Word列印郵件合併文件時出現空白頁,這篇文章將對您有所幫助。郵件合併是一項便捷的功能,讓您能夠輕鬆建立個人化文件並傳送給多個收件者。在MicrosoftWord中,郵件合併功能備受推崇,因為它能夠幫助使用者節省手動為每個收件者複製相同內容的時間。為了列印郵件合併文檔,您可以轉到郵件標籤。但有些Word使用者反映,在嘗試列印郵件合併文件時,印表機會列印空白頁或完全不列印。這可能是由於格式設定不正確或印表機設定問題。嘗試檢查文檔和印表機設置,確保列印前預覽文檔,以確保內容正確。如果

本文將向讀者介紹在Win11系統中如何使用命令提示字元(CommandPrompt)來尋找網路介面卡的實體位址(MAC位址)。 MAC位址是網路介面卡(NIC)的唯一標識符,它在網路通訊中扮演著重要角色。透過命令提示符,使用者可以輕鬆地獲取到當前電腦上所有網路適配器的MAC位址信息,這對於網路故障排查、配置網路設定等任務非常有幫助。方法一:使用「命令提示字元」1、按【Win+X】組合鍵,或【右鍵】點選工作列上的【Windows標誌】,在開啟的選單項目中,選擇【執行】;2、執行窗口,輸入【cmd】指令,然

一、概述sar命令透過從系統活動中收集的資料來展示系統的使用報告。這些報告由不同部分組成,每個部分都包含資料類型和收集資料的時間。 sar指令的預設模式顯示存取CPU的各種資源(如使用者、系統、I/O調度等)在不同時間增量下的CPU使用率。此外,它還顯示給定時間段內空閒CPU的百分比。報告底部列出了每個數據點的平均值。 sar預設每10分鐘報告一次收集的數據,但您可以使用各種選項來篩選和調整這些報告。與uptime指令類似,sar指令也可協助您監控CPU的負載狀況。透過sar,您可以了解過度負載發

Win11系統中,可以透過指令來啟用或停用Hyper-V增強會話模式。本文將介紹如何使用指令來進行操作,幫助使用者更好地管理和控制系統中的Hyper-V功能。 Hyper-V是Microsoft提供的一種虛擬化技術,它內建在WindowsServer和Windows10、11(家用版除外)中,允許使用者在Windows系統中執行虛擬作業系統。雖然虛擬機器與宿主機作業系統隔離,但透過設置,它們仍然能夠使用宿主機的資源,如音效卡和儲存設備等。其中一個關鍵設定就是啟用「增強會話模式」。增強會話模式是Hyper

在抖音上,使用者不僅可以分享自己的生活點滴和才藝,還可以和其他使用者互動交流。在這個過程中,有時候我們需要向其他用戶發送文件,例如圖片、影片等。那麼,在抖音上如何發給別人文件呢?一、抖音上如何發給別人文件? 1.開啟抖音,進入你想要傳送檔案的聊天介面。 2.點選聊天介面中的「+」號,選擇「檔案」。 3.在檔案選項中,你可以選擇傳送圖片、影片、音訊等檔案。選擇你想要發送的文件後,點擊「發送」。 4.等待對方接受你的文件,一旦對方接受,文件就會傳輸成功。二、抖音上發給別人檔案怎麼刪除? 1.打開抖音,進入你發送文
