POP3 收取的郵件多為 MIME 編碼(Base64、Quoted-Printable),包含多部分(文字、HTML、附件)。本文解析 MIME 郵件原始結構,為後續解碼類別鋪路。
From: ... To: ... Subject: =?gb2312?B?xOO6w6Oh?= Date: Sun, 8 Oct 2000 20:28:45 +0800 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0007_01C03166.5B1E9510" This is a multi-part message in MIME format. ------=_NextPart_000_0007_01C03166.5B1E9510 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 w7vT0MLSwuuwyaO/DQo= ------=_NextPart_000_0007_01C03166.5B1E9510 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w MC4yOTIwLjAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8Qk9E WSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj7Du9PQwtLC67DJo788L0ZPTlQ+ PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==
Content-Type: multipart/alternative:郵件包含多種替代格式(純文字/HTML)。boundary:分隔各部分的邊界字串。Content-Transfer-Encoding: base64:內容經 Base64 編碼,需解碼。charset="gb2312":中文編碼宣告,解碼後需轉換為系統編碼。下篇將實作 MIME 解析器:分割部分、解碼傳輸編碼、處理字元集轉換、提取附件。