我們來對郵件協定進行總結,并探讨郵件伺服器的工作原理
一、郵件協定剖析
1.指令過程描述
記得上一篇總結,我們手動敲指令發郵件的時候,登入smtp伺服器的第一句話是:
ehlo emailtest3842
這是通知郵件伺服器我們即将要登入。
在第一代通信協定當中(smtp的低版本),我們使用的是helo,後來smtp更新之後,
變成了第二代協定,為了區分第一代和第二代,新版的指令變為ehlo。
輸入上面的資訊之後,伺服器一般會回複我們:
auth login plain
這就代表了smtp伺服器要求我們進行權限驗證(登入),選擇登入方式是login還是plain。
接着我們輸入:
auth login
代表我們使用login登入的方式進行授權。
然後smtp伺服器讓我們輸入賬号和密碼:
base64 username
xxxxxx
base64 password
xxxxxx
我們的郵件伺服器需要我們輸入Base64加密之後的賬号和密碼。
下面我們輸入:
mail from:<[email protected]>
表明發郵件的賬号。
smtp伺服器回複OK之類的資訊。
下面我們輸入:
rcpt to:<[email protected]>
表明收件人的賬号。
smtp伺服器回複OK之類的資訊。
然後我們輸入:
data
代表我們要編輯郵件的資訊。
接下來我們編輯郵件内容(from和to等代表的資訊,這裡可以随便填寫):
from:xxxx
to:xxxx
subject:xxxx
date:
content!!!
.
打點“.”之後就結束編輯郵件。
輸入quit就推出smtp郵件伺服器。
二、郵件伺服器的工作原理
我們使用郵件用戶端(如outlook),輸入郵件smtp伺服器資訊和pop3伺服器資訊,
之後輸入賬号密碼就可以進行郵件的收發了。此時有一個問題,當我們從用戶端
登入126的smtp伺服器的時候,是需要輸入賬号密碼的,但是sina向126的smtp伺服器
發送請求和傳遞郵件的時候,是不需要sina輸入賬号密碼的,這個時候126怎麼知道
什麼時候放開smtp伺服器?
其實每個smtp伺服器差別郵件用戶端的請求和其它smtp請求的方法是,當接受到
ehlo請求的時候,隻要判定一下後面跟着的使用者名用DNS域名解析之後的ip是不是請求方
的ip即可,如果不是,那說明是郵件用戶端的請求,就要求輸入賬号密碼進行驗證。
如果是,說明是郵件伺服器的請求,就放行。
這裡以新浪的Smtp處理伺服器為例:
差別用戶端和其它smtp伺服器的方法就是上面說的DNS解析區分。
處理用戶端的smtp伺服器的ip絕對不能注冊到DNS中。
題外話:DNS域名解析過程:
轉載請注明出處:http://blog.csdn.net/acmman/article/details/70478077