SMTP協議

SMTP( Simple Mail Transfer Protocol, 簡單郵件傳輸協議 )

一封郵件是由信封和內容構成
  • 信封包含發送者地址、傳輸模式、一個或多個接收者地址

  • 內容使用頭部和主體組成

    • 頭部的結構是鍵/值對的集合,並且必須是使用US ASCII進行編碼
    • 主體是文本結構,通常使用US ASCII編碼,但一些擴展(比如MIME)放開了這種限制

連接網易SMTP服務器

> nc smtp.163.com 25
< 220 163.com Anti-spam GT for Coremail System (163com[20141201])
EHLO命令

當開啓一個SMTP會話時,第一個命令是EHLO或者HELO

當客戶端支持擴展SMTP協議,則應該發送EHLO命令

服務器接收到EHLO命令:如果命令不被允許,則返回狀態碼501;如果沒有實現該命令,則返回狀態碼502

可以理解爲擴展SMTP協議使用EHLO命令來替代傳統SMTP協議中的HELO命令

語法:EHLO <SP> <domain> <CRLF>

sp表示空格,CRLF表示回車換行,參數domain表示郵件發送者(指用戶名或者主機名)

> EHLO myself
< 250-mail
< 250-PIPELINING
< 250-AUTH LOGIN PLAIN
< 250-AUTH=LOGIN PLAIN
< 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrhOTc3UCa0xDrUUUUj
< 250-STARTTLS
< 250 8BITMIME

返回的內容與服務器提供的SMTP擴展服務有關,不同的服務器返回內容一般不同

AUTH命令

EHLO命令中,服務器會返回所支持的認證方式,就本例而言,該SMTP服務器支持LOGINPLAIN兩種方式,當然,SMTP驗證還有GSSAPICRAM-MD5

使用LOGIN方式登陸,用戶名和密碼使用Base64加密加密

> AUTH LOGIN
< 334 dXNlcm5hbWU6
> base64(my name)
< 334 UGFzc3dvcmQ6
> base64(my password)
> 235 Authentication successful
MAIL FROM命令

語法:MAIL <SP> FROM:<reverse-path> <CRLF>

參數reverse-path表示反向路徑,其中包含發送過程中經過的主機名列表以及郵箱名,列表中第一個主機就是發送此命令的主機,可用於接收錯誤信息。當然在使用過程中,我們簡單的設爲自己的郵箱名就好

此命令告訴服務器新的發送操作已經開始,服務器會復位所有狀態表和緩衝區(包括接收人和郵件數據)

> MAIL FROM:<[email protected]>
< 250 Mail OK
RCPT TO命令

語法:RCPT <SP> TO:<forward-path> <CRLF>

參數forward-path包含主機的路由表和目的郵箱,在其中的第一個主機就是接收命令的主機。作爲用戶簡單的設置接收者的郵箱地址就可以

可以設置多個接收者

> RCPT TO:<[email protected]>
< 250 Mail OK
> RCPT TO:<[email protected]>
< 550 User not found

如果命令被接收,服務器返回一個250 OK應答。如果接收者未知,接收方會返回一個550 Failure應答

DATA命令

語法:DATA <CRLF>

如果命令被接收,服務器返回一個354 Intermediate應答。這時寫完信件內容,在最後一行僅發送一個句號來表示郵件內容的結束(接受者不會收到該句號),當信件結尾收到並存儲後,接收者發送一個250 OK應答。

信件內容的頭部應該包含Date(時間), Subject(標題), To(收件人), Cc(抄送), From(發件人)這些基本信息

> DATA
< 354 End data with <CR><LF>.<CR><LF>
> from:<[email protected]>
> to:<[email protected]>
> subject:hello world
> 
> hello,this is a mail
> .
< 250 Mail OK queued as smtp4,DtGowAC3N2HNfaRc+oFDAA--.262S2 1554284072

上述的命令需要按順序執行,郵件才能發送成功,可以到自己的郵箱中查看,如果沒有找到,或許被放入了垃圾箱裏

在這裏插入圖片描述

服務器應答狀態碼

  • 220 服務器服務就緒
  • 250 命令操作完成
  • 334 等待客戶端輸入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章