本文說明:
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