SMTP是工作在兩種情況下
一是電子郵件從客戶機傳輸到服務器
二是從某一個服務器傳輸到另一個服務器
SMTP是個請求/響應協議
命令和響應都是基於ASCII文本
並以CR和LF符結束
響應包括一個表示返回狀態的三位數字代碼
SMTP在TCP協議
號端口監聽連接請求
連接和發送過程
a
建立TCP連接
b
客戶端發送HELO命令以標識發件人自己的身份
然後客戶端發送MAIL命令服務器端正希望以OK作為響應
表明准備接收
c
客戶端發送RCPT命令
以標識該電子郵件的計劃接收人
可以有多個RCPT行服務器端則表示是否願意為收件人接受郵件
d
協商結束
發送郵件
用命令DATA發送
e
以
表示結束輸入內容一起發送出去
f
結束此次發送
用QUIT命令退出
另外兩個命令
VRFY
用於驗證給定的用戶郵箱是否存在
以及接收關於該用戶的詳細信息
EXPN
用於擴充郵件列表
郵件路由過程
SMTP服務器基於
域名服務DNS中計劃收件人的域名來路由電子郵件
SMTP服務器基於DNS中的MX記錄來路由電子郵件
MX記錄注冊了域名和相關的SMTP中繼主機
屬於該域的電子郵件都應向該主機發送
若SMTP服務器收到一封信要發到:
a
Sendmail請求DNS給出主機的CNAME記錄
如有
假若CNAME到
則再次請求的CNAME記錄
直到沒有為止
b
假定被CNAME到
然後sendmail請求域的DNS給出的MX記錄shmail MX
c
Sendmail最後請求DNS給出的A記錄
即IP地址
若返回值為
d
Sendmail與
連接
傳送這封給的信到
這台服務器的SMTP後台程序
SMTP基本命令集
命令 描述
HELO 向服務器標識用戶身份
發送者能欺騙
說謊
但一般情況下服務器都能檢測到
MAIL 初始化郵件傳輸
mail from:
RCPT 標識單個的郵件接收人
常在MAIL命令後面可有多個rcpt to:
DATA 在單個或多個RCPT命令後
表示所有的郵件接收人已標識
並初始化數據傳輸
以
結束
VRFY 用於驗證指定的用戶/郵箱是否存在
由於安全方面的原因
服務器
常禁止此命令
EXPN 驗證給定的郵箱列表是否存在
擴充郵箱列表
也常被禁用
HELP 查詢服務器支持什麼命令
NOOP 無操作
服務器應響應OK
QUIT 結束會話
RSET 重置會話
當前傳輸被取消
MAIL FROM命令中指定的地址是稱作 envelope from地址
不需要和發送者自己的地址是一致的
RCPT TO 與之等同
指明的接收者地址稱為envelope to地址
而與實際的to
行是什麼無關
為什麼沒有RCPT CC和RCPT BCC:?
所有的接收者協商都通過RCPT TO命令來實現
如果是BCC
則協商發送後在對方接收時被刪掉信封接收者
郵件被分為信封部分
信頭部分和信體部分
envelope from
envelope to 與message from:
message to:完全不相干
evnelope是由服務器主機間SMTP後台提供的
而message from/to是由用戶提供的
有無冒號也是區別
怎樣由信封部分檢查是否一封信是否是偽造的?
a
received行的關聯性
現在的SMTP郵件傳輸系統
在信封部分除了兩端的內部主機處理的之個
考慮兩個公司防火牆之間 的部分
若兩台防火牆機器分別為A和B
但接收者檢查信封received
行時發現經過了C
則是偽造的
b
received
行中的主機和IP地址對是否對應如
Receibed: from ( [
] by mail
bieberdorf
edu
c
被人手動添加在最後面的received行
Received: from ([
]) by mail
bieberdorf
edu (
)
Received: from by (
)
Received: from by (
)
From:http://tw.wingwit.com/Article/os/xtgl/201311/9344.html