Application Email

E-mail 電子郵件
信封:表頭header+信体本體body
內定使用7bit-ascii儲存

歷史
1982ARPANET的電子郵件:RFC821傳送協定RFC822訊息格式(目前用),修改版為RFC2821,RFC2822
1984CCITT推X.400,但設計不良且複雜

發送信架構如下
TA(Transport Agent):在不同的主機之間做郵件的轉送動作,確認目的地是自己後交給DA,ex:sendmail
DA(Deliver Agent):將從網路收來的信,也就是TA給的信放到系統信箱
UA(User Agent):將系統信箱裡的郵件放到使用者信箱,並提供方便的讀/寫信件的環境,ex:mail,elm,pine,mutt

……………………………….

RFC822表頭格式:
TO:主要收信人dns位址
Cc:附帶收信人
Bcc:秘密副本
From:產生信件的人
Sender:寄件的人,可省
Received:含程式代號,收到訊息時間,找出路徑選擇系統的資訊,路徑上各傳送代理程式會加一行
格式大致為from by
ex:from attack.systw.net([10.10.10.1]) by victim.net with smtp
表示信是從attack.systw.net這個主機寄出,而由victim.net這個主機收到 
Return-Path:送信者路徑,由訊息傳送程式加入

RFC822表頭格式部分欄位:可設私人用表頭,欄位名需以X-開頭
Date:寄出時間
Reply To:指定回覆位址
Message-Id;唯一代號
In-Reply-To:回信原始代號
References:相關信件代號
Keywords:使用者選擇關鍵字
Subject:主旨

ps:更多資訊可參考
http://www.ascc.sinica.edu.tw/nl/89/1603/3.txt
http://www.wretch.cc/blog/kkvivi6309/11962081

MIME(multipurpose internet mail extensions,多用途網際網路郵件延伸)RFC1314
定義非ascii訊息編碼原則
MIME增加的RFC822欄位
 MIME-Version:版本
 Content-Description:ascii字串,表訊息內容
 Content-Id:內容識別代號
 Content-transfer-Encoding:主体包裝編碼方式(7bit-ascii,8bit-ascii,binary,base64,quoted-printable,x-token)
 Content-Type:訊息本質

訊息本質(主型態/次型態)
text/plain:無須編碼原訊息
text/enriched:提供sgml(standard generalized markup language,標準通用標記語言)
text/html:網頁
text/xml:網頁
image/gif:圖片
image/jpeg:圖片
audio/basic:聲音
video/mpeg:只含視覺資訊,不背景音效,mpeg(moving picture experts group,動態影像壓縮標準)
application/octek-stream:收到時會提示使用者儲存檔案
application/postscript:用於描述列印的內容
message/rfc822:將訊息封裝在另一個訊息內
message/partial:將信件分割並送出
message/external-body:需從網路抓取的訊息
multipart/mixed:ex附件,允許各部份不同,並無額外附加結構
multipart/alternative:各部份相同,但用不同媒體或編碼
multipart/parallel:可用在多種語言
multipart/digest:許多訊息包裝成組合訊息時

……………………………….

SMTP(simple mail transfer protocol,簡易郵件傳輸協定)
port:25,簡單ascii協定,使用HELO指令
若用戶端和伺服端逾時間各不同,可能在其中一端仍忙錄時中斷
若兩主機的兩名單各有對方名單,收到任一名單的信件可能產生infinite mailstorm(無窮信件風暴)
ESMTP(extended SMTP)擴充的SMTP:可解決部份問題,使用EHLO指令

POP3(post office protocol version3,郵局通訊協定v3)
port:110,定義在rfc1939
1用在使用者讀取郵件時,連到pop3伺服器用110port建tcp連結,成功後伺服端傳ascii格式的+OK
2授權負責使用者登入,成功後送LIST指令列出信箱內容
3使用RETR指令,處理使用接收電子郵件
4更新帳號內郵件則執行刪除,可用DELE
5用QUIT終止處理階段,然後切斷TCP連結

IMAP(internet message access protocol,網際網路訊息存取協定)
port143,定義在rfc2060
提供讀取訊息或部份訊息完整機制,訊息不會被傳輸到使用者電腦
目前的版本為IMAP4

……………

以telnet檢查smtp方式

telnet mailserver.com 25
HELO self.com                 //先指定SMTP主機之間通訊的開頭問候語,後面要帶自己的寄信網域名稱
mail from:test@self.com      //宣告寄件者的寄信網域名稱
rcpt to:test@mailserver.com //指定要送到對方主機的那個帳號
data               //指示對主機準備要輸入訊息
Subject:mailtest   //輸入主旨為mailtest
this is mail test   //開始輸入內容
.      //輸入完畢之後以單獨的 . 作結束