目錄
簡單郵件傳輸協議
編輯簡單郵件傳輸協議(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郵件大小。較舊的客戶端和服務器可能會嘗試傳輸尺寸過大的消息,這些消息將在消耗網絡資源(包括按分鐘付費的網絡鏈接連接時間)后被拒絕。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/112505/