iT邦幫忙

0

企業資料通訊Week5 (2) | electronic mail [SMTP部分]

electronic mail 三要件

1. user agents(UA)

郵件使用者代理人,也叫"mail reader",透過 UA 來幫我們送信到mail servers(郵件伺服器)。UA 主要的功能就是收受郵件主機的電子郵件,以及提供使用者瀏覽編寫郵件的功能!

2.mail servers /**這裡寫得很淺,想知道更多可以看 22.1.3 郵件傳輸所需要的元件 (MTA, MUA, MDA) 以及相關協定 */

我們通常接收到的 email 都是使用『帳號@主機名稱』的方式來處理的, 所以說,你的郵件伺服器『就一定要有一個合法註冊過的主機名稱』。
內有mail box(舊式信箱,某個帳號專用的信件收受檔案)與寄信的queue。

3.SMTP(simple mail transfer protocol)

The SMTP protocol is a text-based protocol that is composed of commands (EX: EHLO, MAIL FROM, RCPT TO, DATA, and QUIT.)and replies.

  • 使用TCP ,Port 25[課本上說使用RFC 2821]
    (網路上查是RFC 5321)
  • 有送信的動作EX:UA送到mail server,mail server與mail server的信件交換也是SMTP
  • 訊息使用7-bit ASCII
    /*RFC是用來記錄網際網路規範、協定、過程等的標準檔案/
    /*SMTP與HTTP不同之處是SMTP不用收信的UA一直在線上,跟送信很像,我不用一直在家,丟在mail box/
    /*SMPT只跟送信有關,與收信無關/
    Q:為甚麼與收信無關?

三階段:
1)handshaking(greeting)交握
2)transfer of messages
3)closure

情境例子SMTP

Alice 要寄一封信給Bob
https://ithelp.ithome.com.tw/upload/images/20211027/20135414DYnMeT2FZ7.png
/*發信出去的是client,注意角色會依行為改變/
如圖:
https://ithelp.ithome.com.tw/upload/images/20211026/20135414ilJoiI5xUC.png

1)Alice 用UA寫一封信
2)Alice 的UA 送信到 Alice的mail server(此動作UA是client,要寄的信會在mail server的 message queue排隊)
3)、4)現在Alice 的SMTP server 透過 TCP 送信到 Bob 的 mail server(Alice 的 Mail server 此時是client角色)

5)Bob 的mail server 把訊息傳到 Bob 的信箱(之後Bob 有沒有用UA 收信就與SMTP無關了)
6)Bob 開UA 拿信(不是SMTP,另一個protocol)
因為Bob的Email server不知道Bob 的IP 與 Port,就等Bob 過來拿,因為Bob 的UA 知道 bob@someschool.edu 的Port 與 IP。

SMTP 的互動

SMTP定義了Server與Client的互動順序。
下面是兩個mail server之間使用SMTP的範例,裡面都是純text。
https://ithelp.ithome.com.tw/upload/images/20211027/2013541427jdclzBNx.png

  • 第一行: 建立TCP連線後,接著S(server,Bob 的 mail server)先打招呼:
    220 hamburger.edu /*一切正常,我是hamburger.edu/

  • 第二行: C(client, Alice 的mail server)也打招呼:
    HELO crepes.fr /*你好,我是crepes.fr/

  • 第三行: S 說250 是你好的意思

  • 第四行: C 說這裡有一封信來自 alice@crepes.fr

  • 第五行: S 接受

  • 第六行: C 表示要傳給 S 下面的帳號 bob@ hamburger.edu

  • 第七行: S 接受

  • 第八行: C:DATA /*我要開始送囉/

  • 第九行: S:354/*沒問題/ 並要求信件結束時用單獨佔的一行的 "."表示

  • 第十到十二行的三個C: 都是信件內容,用ASCII

  • 第十三行:S表示收到
    接下來就是221結束

然後TCP插槽清空釋放資源
/**特色是交互性的,而為甚麼這樣設定呢?
因為在交談的過程中可以做很多動作EX:刪信
*/

SMTP 特性

https://ithelp.ithome.com.tw/upload/images/20211027/20135414Om1Cpct5nF.png

  • 使用persistent connections 因為要一直來往,不能斷

  • commands:ASCII text

  • response:status code and phrase EX:220
    /*訊息一定要是7-bit ASCII,不能中文不能圖片,想當然後來有人模改/

  • 與HTTP相比,HTTP回應的物件都會包好在回應訊息中,但 SMTP 會有multipart message

信件內容

剛剛說模改,它是改信件「內容」的format部分(在RFC 822 改,與SMTP 的 RFC 2821不一樣的protocol) SMTP主要負責client server的交換來往。
https://ithelp.ithome.com.tw/upload/images/20211027/20135414ONqERcc2gl.png
這信件內容分兩部分,header 與 body

header:

1)To EX:bob@...
2)From EX:alice@...
3)Subject 標題
4)還有很多...
RFC 822的 From, To(只是表示誰寄給誰) 與 RFC 2821 的From, To (用來交換訊息的,寄完就丟掉,只留message放在mail box)不一樣
UA會把信件內容的資料結構造出來,然後像信一樣把內容塞到信件中,mail server 不會看到裡面內容,它會直接放到mail box

body:

是ASCII text
可以用一些function(EX:quoted, base64) 轉換其他格式為ASCII

我們可以開自己的原始郵件來看

multipart

現在的信大部分是HTML格式,下圖是其中一個part,有註明content-Type, Content-Transfer-Encoding
https://ithelp.ithome.com.tw/upload/images/20211027/20135414EyJj0tSyHw.png

如果是附加檔案,如圖:
https://ithelp.ithome.com.tw/upload/images/20211027/20135414sxJNYmSKBq.png

補充:

MIME協定用於定義複雜的郵件體格式,為了解決SMTP只能用文本格式。它可以表達多段平行的文字內容和非文本的郵件內容,例如,在郵件體中內嵌的圖像數據和郵件附件等

參見:
SMTP WIKI
鳥哥的 Linux 私房菜|第二十二章、郵件伺服器: Postfix
RFC WIKI
smtp 協定 MIME 協定
理解郵件傳輸協定(SMTP、POP3、IMAP、MIME)


尚未有邦友留言

立即登入留言