1 概述
郵件解析庫API完全使用面向對象技術設計,使用C++語言開發的用於郵件解析和組裝的庫。它提供了一些類用來解析和組裝Internet郵件,如MimeMessage和MimeBodyPart,用於Internet郵件協議實現並且遵循RFC822和RFC2045規範。這些API庫用於應用程序的開發。
1.1 術語
RFC:Request For Comments, 請求註解, Internet標準(草案)
MIME:Multipurpose Internet Mail Extension protocol, 多用途的網際郵件擴充協議
2 郵件解析庫的實現
2.1 實現過程
本郵件解析庫(FastMail)參考JavaMail的結構設計,有與之類似的接口和類。本解析庫用到基礎庫Fast庫參考ACE庫和STL、Java Framework庫設計,包含一些字符串處理和容器的類。設計它們的目的是爲了簡化庫的接口,並且儘量與Java庫的接口兼容,同時使用完全標準的C++特性,使庫更易維護更穩固。
這兩個庫從2004-6月底開始開發設計至<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2004-10-10完成,歷時3個多月,由於不是全力投入,實際耗時約2個月,由於有JavaMail、ACE和STL庫的借鑑,所以設計起來還比較順利。兩個庫的代碼量約有32000行代碼。類設計合理並且提供豐富的接口供二次開發和改造。
下面是兩個庫的文件列表以及郵件解析庫的類的介紹(Fast庫另有文檔專門介紹):
2.2 文件列表
FAST基礎庫
comm./
comm./FastArray.h 數組類
comm./FastAutoPtr.h 自動管理指針類
comm./FastBase.h FAST庫公共定義,包含一個完整的內存分配器類
comm./FastHashMap.h HashMap容器類
comm./FastMap.h Map容器類
comm./FastString.h FastString字符串處理類
comm./FastVector.h Vector容器類
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
郵件解析引擎FastMail庫
mime/
mime/CharsetUtils.cpp 字符串編碼和解碼工具
mime/CharsetUtils.h
mime/MimeActivation.cpp 郵件解析初始化工具
mime/MimeActivation.h
mime/MimeBase.h 郵件解析公共定義
mime/MimeContainer.cpp 郵件解析Multipart容器
mime/MimeContainer.h
mime/MimeEntity.cpp 郵件解析MIME實體類
mime/MimeEntity.h
mime/MimeMessage.cpp 郵件解析MIME郵件類
mime/MimeMessage.h
mime/MimeObject.cpp 郵件解析MIME對象類
mime/MimeObject.h
mime/MimeParser.cpp 郵件解析工具類
mime/MimeParser.h
mime/MimeUtility.cpp 郵件解析工具類
mime/MimeUtility.h
3 郵件解析庫的類
3.1 類的實現
郵件解析庫包含一系列的類,主要有MimeMessage(郵件實現類)、MimeBodyPart(郵件正文段體類)、MimeMultipart(郵件多部段體類)、InternetHeaders(郵件頭類)、InternetAddress(郵件地址類)和ContentType(段體類型類)等。解析和組裝郵件主要使用這些類進行組裝和分解。
下面是所有的類的說明:
類名 |
名稱 |
說明 |
基類 |
ContentDisposition |
MIME郵件頭 |
實現MIME郵件頭的ContentDisposition |
|
ContentID |
MIME郵件頭 |
實現MIME郵件頭的ContentID |
|
ContentType |
MIME郵件頭 |
實現MIME郵件頭的ContentType |
|
MimeType |
MIME類型類 |
實現MIME的類型,記錄在ContentType裏,如text/plain |
|
ConverterFactory |
編碼轉換工廠類 |
用於創建編碼轉換對象 |
|
ICodeConverter |
編碼轉換接口類 |
|
|
Base64Converter |
BASE64編碼類 |
BASE64的編碼和解碼 |
ICodeConverter |
QPConverter |
QP編碼類 |
Quote-Printable的編碼和解碼 |
ICodeConverter |
hdr |
MIME郵件頭類 |
實現MIME郵件頭HEADER行 |
|
HeaderTokenizer |
郵件頭分解類 |
實現分解MIME郵件頭的各元素,如Content-Type的mimetype和各個參數。 |
|
IMimePart |
MIME郵件段體接口類 |
郵件段體類的基類 |
|
MimeBodyPart |
MIME郵件段體類 |
實現MIME郵件各個段體的類 |
IMimePart |
MimeMessage |
MIME郵件類 |
MIME郵件主類 |
IMimePart |
IMultipart |
多部分接口類 |
多部分類的基類 |
|
MimeMultipart |
多部分實現類 |
保存段體類對象的多部分容器類 |
IMultipart |
InternetAddress |
MIME郵件地址類 |
實現MIME郵件地址的類 |
|
InternetHeaders |
MIME郵件頭部分類 |
實現保存MIME各郵件頭的容器類 |
|
MailDateFormat |
郵件時間轉換類 |
實現MIME郵件的格式的時間轉換 |
|
MailDateParser |
時間分解處理類 |
實現MIME郵件格式的時間的分解 |
|
MimeInitialization |
郵件解析全局初始化類 |
實現初始化MIME郵件用到的各個全局變量 |
|
MimetypesFileTypeMap |
郵件Mime類型映射類 |
實現郵件MimeType和FileType類型的映射表,用於查詢 |
|
MimeUtility |
MIME郵件分析工具類 |
實現郵件解析用到的各個解析工具函數 |
|
ParameterList |
參數列表類 |
實現ContentType和ContentDisposition用到的參數列表 |
|
SystemProperty |
系統環境類 |
實現讀取系統環境參數的方法 |
|
UniqueValue |
郵件唯一值生成類 |
實現生成MIME郵件用到的唯一值的類,如boundary等 |
|
3.2 類圖
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
3.3 MimeMessage類
現在介紹一下最主要的也是提供主要的調用接口API的類MimeMessage。
MimeMessage提供了一系列的方法供調用者使用,如定義了獲取地址信息和獲取郵件正文內容的結構(可以爲具體的數據也可以爲一個MimeMultipart對象),用來實現RFC822和MIME規範。
一個MimeMessage對象裏保存了一個郵件內容數據(Content),以及一些記錄特定的郵件地址信息(如發件人(Sender)和收件人(recipients))的屬性(InternetHeaders)。還有關於這封郵件的結構信息(structural information),以及它的郵件主體(body)的段體類型(Content-Type)。
下面用圖來描述一個MimeMessage對象內部可能的結構:
3.4 MimeMessage類結構圖
。。。未完待續
4 參考文獻
[1]《JavaMail 1.2》
[2]《JavaMailTM API Design Specification Version 1.2》
[3]《C++網絡編程 卷1:運用ACE和模式消除複雜性》