協議基礎:SMTP:使用Telnet學習SMTP協議

協議基礎:SMTP:使用Telnet學習SMTP協議

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: https://blog.csdn.net/liumiaocn/article/details/81131420

SMTP是簡單郵件傳輸協議(Simple Mail Transfer Protocol)的縮寫,這篇文章將經過如何使用telnet命令發生郵件結合RFC文檔來學習一下SMTP協議的基礎知識。html

OSI模型 & SMTP

根據OSI7層或者5層的模型不一樣,各層常見的協議信息以下:
這裏寫圖片描述ruby

其實協議衆多,這裏借用一張來源與網絡的整理結果用於展現OSI7層模型的常見協議的信息,包括應用層的SMTP/POP3/IMAP4服務器

這裏寫圖片描述

SMTP vs POP3 & IMAP4

這裏寫圖片描述
SMTP和POP3以及IMAP都是用來作什麼的,簡單的來講,smtp主要負責發,pop3和imap主要負責收。
一封郵件的發&收的流程是經過SMTP進行發送,使用POP3或者IMAP4進行接收的。
這裏寫圖片描述markdown

SMTP RFC文檔

SMTP的RFC初始版本是RFC 821,如下列出了SMTP相關的一部分RFC變化的列表網絡

RFC版本 時間 說明 URL
RFC 821 1982/08 初始版本 https://tools.ietf.org/html/rfc821
RFC 974 1986/01 域名系統需求和實現相關 https://tools.ietf.org/html/rfc974
RFC 1035 1987/11 域名系統需求和實現相關 https://tools.ietf.org/html/rfc1035
RFC 1869 1995/11 ESMTP規格擴展 https://tools.ietf.org/html/rfc1869
RFC 2841 2001/04 - https://tools.ietf.org/html/rfc2841
RFC 5321 2008/10 - https://tools.ietf.org/html/rfc5321

SMTP模型

參看RFC5321,能夠了解到SMTP的模型以下:
這裏寫圖片描述工具

經常使用指令

SMTP中包含一些基本的命令用於客戶端和服務器端進行交互,現列出一些常見的指令:學習

指令 說明
HELO 與服務器確認,通知其客戶端使用的機器名稱,通常郵件服務器不作限定
AUTH 使用AUTH LOGIN與服務器進行登陸驗證
MAIL FROM 發件人信息,填寫與認證信息不一樣每每被定位爲垃圾郵件或惡意郵件
RCPT TO 收信人地址
DATA 輸入郵件基本信息
FROM 郵件基本信息:發信人顯示信息(此處能夠僞造身份,可是很是容易被識別)
FROM 郵件基本信息:服務器收件人顯示信息
SUBJECT 郵件基本信息:郵件標題,不填寫也每每容易被定位爲垃圾郵件
QUIT 斷開連接

常見指令返回碼說明

返回碼 說明
220 服務就緒
250 請求動做成功完成
235 認證經過
221 處理中
354 發送開始,每每與data指令結合
500 指令錯誤
550 命令沒法執行

基本流程

SMTP客戶端與SMTP服務器端一個常見的流程以下所示:編碼

SMTP客戶端SMTP客戶端SMTP服務器端SMTP服務器端HELO 機器名(SMTP服務器,這是個人機器名)250 OK我要登陸:輸入用戶名/密碼AUTH LOGIN334 返回碼(eg:dXNlcm5hbWU6)郵箱登陸名的base64編碼334 返回碼(eg:UGFzc3dvcmQ6)登陸密碼base64編碼235 Authentication successful設定發信人地址MAIL FROM:<發信人地址eg:devopsadmin@163.com>250 Mail OK設定收信人地址RCPT TO:<收信人地址eg:liumiaocn@outlook.com>250 Mail OK我要寫信了DATA354 End data with <CR><LF>.<CR><LF>設定From/To/Subject/信件內容,最後以.結束好的,給你發信250 Mail OK

TELNET

使用telnet可使用SMTP指令與服務器端進行交互,不一樣的OS telnet的安裝不一樣,好比:spa

操做系統 安裝方式
CENTOS yum install telnet
MacOS brew install telnet
Alpine apk add busybox-extras(Alpine 3.7版本之後,以前包含在busybox中)

驗證

這裏使用163的免費信箱進行mail發送試驗,信息以下:操作系統

項目 說明
發送方 devopsadmin@163.com
接收方 liumiaocn@outlook.com
郵件標題 confirm information

郵件內容

Hi, Michael

I got your message. Looking forward to meeting you. Thanks & Best Regards.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

操做日誌

[root@platform ~]# telnet smtp.163.com 25 Trying 123.125.50.134... Connected to smtp.163.com. Escape character is '^]'. 220 163.com Anti-spam GT for Coremail System (163com[20141201]) HELO liumiao 250 OK AUTH LOGIN 334 dXNlcm5hbWU6 ZGV2b3BzYWRtaW4= 334 UGFzc3dvcmQ6 密碼的base64編碼 235 Authentication successful MAIL FROM:<devopsadmin@163.com> 250 Mail OK RCPT TO:<liumiaocn@outlook.com> 250 Mail OK DATA 354 End data with <CR><LF>.<CR><LF> FROM: devopsadmin@163.com To: liumiaocn@outlook.com Subject: confirm information Hi, Michael I got your message. Looking forward to meeting you. Thanks & Best Regards. . 250 Mail OK queued as smtp4,DtGowAAHhSrBwV5bL3XJAA--.5571S2 1532936690 Connection closed by foreign host. [root@platform ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

郵件接收

這裏寫圖片描述

操做說明

注意事項

輸入AUTH LOGIN以後須要輸入用戶名和密碼進行登陸,登陸時注意以下事項

  • 登陸名稱爲@以前的內容的base64編碼,好比devopsadmin@163.com爲devopsadmin的base64編碼
  • base64編碼基本等於明碼,可是使用的過程當中請注意是否包含回測換行符號,好比devopsadmin的base64編碼生成:echo -n 「devopsadmin」 |base64
  • 密碼不是郵箱的密碼,網易的話專門還有一個密碼,請注意
  • 郵件發送每每服務器端須要作設定,請確認相關的郵件服務器
  • 垃圾郵件不一樣的郵件系統判斷標準不一樣,通常正確將所有信息填完基本沒有問題

base64編碼的換行

請注意看一下以下代碼包含換行與否的狀況,認證通不過的時候,請注意檢查

[root@platform ~]# echo -n "devopsadmin" |base64 ZGV2b3BzYWRtaW4= [root@platform ~]# echo "ZGV2b3BzYWRtaW4=" |base64 -d devopsadmin[root@platform ~]# [root@platform ~]# [root@platform ~]# echo "devopsadmin" |base64 ZGV2b3BzYWRtaW4K [root@platform ~]# echo "ZGV2b3BzYWRtaW4K" |base64 -d devopsadmin [root@platform ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

DATA段

DATA段爲mail的正文,在這裏還能夠設定FROM/TO,有些人會在這裏試圖改變設定來攥改發信的地址,好比那些垃圾郵件的發送者,基本上郵件系統都會在這裏作防禦。好比163的郵箱,反垃圾郵件的策略以下,對僞造郵件頭或者其餘方式的欺騙性手段都會進行判斷:

一、收件人事先沒有提出要求或者贊成接收且沒法拒收的;

二、使用或包括無效的或僞造的郵件頭;

三、使用或包括僞造的、無效的或者不存在的域名;

四、利用任何技術僞造、隱藏或掩蓋傳輸路徑來源的識別信息;

五、使用任何方式生成欺騙性地址信息;

六、在沒有得到第三方許可的狀況下使用、中繼或經過第三方的互聯網設備;

七、主題行或內容包含錯誤、誤導或虛假的信息;

八、違反了國家相關法律規定和網易服務條款。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

好比DATA部分的FROM/TO/Subject等不正常設定,你很容易會收到包含554 DT:SPM的信息:

554 DT:SPM 163 smtp4,DtGowABXwXYYqF5bzXrBAA--.5359S2 1532930131,please see http://mail.163.com/help/help_spam_16.htm?ip=61.152.164.43&hostid=smtp4&time=1532930131
  • 1

如下爲網易免費郵箱關於垃圾郵件相關的錯誤碼:

  •554 DT:SPM 發送的郵件內容包含了未被許可的信息,或被系統識別爲垃圾郵件。請檢查是否有用戶發送病毒或者垃圾郵件;   •554 DT:SUM 信封發件人和信頭髮件人不匹配;   •554 IP is rejected, smtp auth error limit exceed 該IP驗證失敗次數過多,被臨時禁止鏈接。請檢查驗證信息設置;   •554 HL:IHU 發信IP因發送垃圾郵件或存在異常的鏈接行爲,被暫時掛起。請檢測發信IP在歷史上的發信狀況和發信程序是否存在異常;   •554 HL:IPB 該IP不在網易容許的發送地址列表裏;   •554 MI:STC 發件人當天內累計郵件數量超過限制,當天再也不接受該發件人的投信。請下降發信頻率;   •554 MI:SPB 此用戶不在網易容許的發信用戶列表裏;   •554 IP in blacklist 該IP不在網易容許的發送地址列表裏。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

PS:技術不是用來發送垃圾郵件或者欺騙性的郵件的,並且不少免費的資源每每自己具備公益性質,請不要利用別人沒有關閉的門窗讓互聯網變得更加污濁,學習的時候也請給本身發信不要打擾別人。

參考文檔

https://tools.ietf.org/html/rfc5321
http://help.163.com/09/1224/14/5RAB4VK500753VB8.html?servCode=6010330
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

相關文章
相關標籤/搜索