SMTP協議簡介

本文說明:

SMTP相關了解,如有錯誤,麻煩指證,謝謝。更多信息請查看RFC2821。

 

基礎知識:

SMTP(Simple Mail TransferProtocol)即簡單郵件傳輸協議,它是一種TCP協議支持的提供可靠且有效電子郵件傳輸的應用層協議。smtp服務器是遵循smtp協議的發送郵件服務器,當接收時作爲smtp服務端,當發送時做smtp客戶端。SMTP是一個推協議,它不允許根據需要從遠程服務器上“拉”來消息。如果客戶使用郵件客戶端收取郵件,需要使用POP3或IMAP協議,向郵件服務器拉取郵件數據,此時該服務器作爲POP3或IMAP服務器。如下圖所示:

 

 


說明:

1、上圖讀取郵件的箭頭是指郵件的流向,該操作是由收件人主動發起的。

2、用戶代理就是用戶與電子郵件系統的接口,大多數情況下就是運行在用戶PC機上的一個程序,如Foxmail。

3、發件人用戶代理爲何不直接將郵件發送給收件人的用戶代理,而是通過郵件服務器來傳輸?

因爲用戶電腦、手機性能有限,無法運行收發郵件的程序,並且無法不間斷地運行並連接到互聯網上. 因此只能將信件暫時存放在郵件服務器中,用戶需要時就可以去下載信件。

4、爲什麼用戶收發郵件時感覺不到SMTP過程?

如果用戶使用用戶代理軟件,則這個複雜的過程被用戶代理屏蔽了,用戶只需要進行簡單的發送操作就可完成郵件的發送. 如果用戶使用Web方式,則所有過程都由郵件服務器完成。

5、smtp一般不使用中間郵件服務器進行發送,如果接收方郵件服務器未準備好,發送方會保留郵件,稍後進行嘗試。

 

SMTP簡單通訊過程

通過telnet程序來測試一個SMTP服務器,並進行簡單說明,如下所示:

$telnet smtp.example.com 25    < -------------------------   進行了tcp連接

220 smtp.example.com ESMTP Service(Lotus Domino Release 8.5.3FP6) ready a

t Thu, 23 Jul 2015 20:48:17 +0800

HELO zjf            <------------------------- HELO命令標記自己的身份

250 smtp.example.com Hello zjf([10.10.34.22]), pleased to meet you

auth login         <------------------------- 進行身份認證

334 VXNlcm5hbWU6

base64加密後的用戶名

334 UGFzc3dvcmQ6

base64加密後的密碼

235 Authentication successful

mail from:[email protected]        < ------------------------- 說明發件人郵箱

250 [email protected]... SenderOK

rcpt to:[email protected]    < ------------------------- (確認接收方是否已做好準備,防止郵件發送了,卻發現無此人,或空間不足等造成資源浪費)

250 [email protected] OK

DATA         <------------------------- 表示開始傳送郵件的內容

354 Please start mail input.

<郵件內容>

.        <------------------------- 兩個回車換行中間用一個點隔開表示郵件內容結束

250 Mail queued for delivery.  <-------------------------  郵件放入了發送服務器隊列

quit  <------------------------- 退出 

221 Closing connection. Good bye.


說明:

1、25端口是SMTP的標準服務端口,數據不經過加密處理,以明文方式發送。

當然也支持加密方式SSL/TLS,另有些發送郵箱服務器支持STARTTLS協議。下圖是他們之間的區別(並沒有詳細描述中間的交互過程)



需要注意的是:

1)  不加密默認使用25端口;如明確使用SSL/TLS加密,則使用465端口

2)  在啓用STARTTLS協議的時候,使用25端口較好,雖然587主要是針對STARTTLS協議的,但支持該協議的並不一定開放該端口,如網易郵箱。

3)  STARTTLS協議不是說只能用TLS加密,也可以使用SSL加密。


2、標識自己的身份

可通過HELO命令和EHLO命令標識自己的身份,兩者的區別是:

HELO命令可以不進行身份認證(除非服務器要求);

EHLO命令則需要進行身份認證,並會返回更多的信息給客戶端,如是否支持starttls協議。

如下面所示:

220 smtp.example.com ESMTP Service(Lotus Domino Release 8.5.3FP6) ready a

t Thu, 23 Jul 2015 15:58:58 +0800

EHLO zjf

250-smtp.example.com Hello zjf([10.10.34.22]), pleased to meet you

250-TLS

250-HELP

250-AUTH LOGIN

250-STARTTLS           < ------------------------- 說明支持starttls協議

250-SIZE 18432000

250 PIPELINING

 

可見要想知道一個郵件服務器是否支持ssl/tls、starttls,可通過telnet登入相應的端口號,和使用EHLO命令來查看。


參考資料:

1、《計算機網絡》

2、百科

3、https://www.fastmail.com/help/technical/ssltlsstarttls.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章