郵件解析庫(kù)API完全使用面向?qū)ο蠹夹g(shù)設(shè)計(jì),使用C++語(yǔ)言開(kāi)發(fā)的用于郵件解析和組裝的庫(kù)。它提供了一些類用來(lái)解析和組裝Internet郵件,如MimeMessage和MimeBodyPart,用于Internet郵件協(xié)議實(shí)現(xiàn)并且遵循RFC822和RFC2045規(guī)范。這些API庫(kù)用于應(yīng)用程序的開(kāi)發(fā)。
RFC:Request For Comments, 請(qǐng)求注解, Internet標(biāo)準(zhǔn)(草案)
MIME:Multipurpose Internet Mail Extension protocol, 多用途的網(wǎng)際郵件擴(kuò)充協(xié)議
本郵件解析庫(kù)(FastMail)參考JavaMail的結(jié)構(gòu)設(shè)計(jì),有與之類似的接口和類。本解析庫(kù)用到基礎(chǔ)庫(kù)Fast庫(kù)參考ACE庫(kù)和STL、Java Framework庫(kù)設(shè)計(jì),包含一些字符串處理和容器的類。設(shè)計(jì)它們的目的是為了簡(jiǎn)化庫(kù)的接口,并且盡量與Java庫(kù)的接口兼容,同時(shí)使用完全標(biāo)準(zhǔn)的C++特性,使庫(kù)更易維護(hù)更穩(wěn)固。
這兩個(gè)庫(kù)從2004-6月底開(kāi)始開(kāi)發(fā)設(shè)計(jì)至2004-10-10完成,歷時(shí)3個(gè)多月,由于不是全力投入,實(shí)際耗時(shí)約2個(gè)月,由于有JavaMail、ACE和STL庫(kù)的借鑒,所以設(shè)計(jì)起來(lái)還比較順利。兩個(gè)庫(kù)的代碼量約有32000行代碼。類設(shè)計(jì)合理并且提供豐富的接口供二次開(kāi)發(fā)和改造。
下面是兩個(gè)庫(kù)的文件列表以及郵件解析庫(kù)的類的介紹(Fast庫(kù)另有文檔專門(mén)介紹):
FAST基礎(chǔ)庫(kù)
comm.\
comm.\FastArray.h 數(shù)組類
comm.\FastAutoPtr.h 自動(dòng)管理指針類
comm.\FastBase.h FAST庫(kù)公共定義,包含一個(gè)完整的內(nèi)存分配器類
comm.\FastHashMap.h HashMap容器類
comm.\FastMap.h Map容器類
comm.\FastString.h FastString字符串處理類
comm.\FastVector.h Vector容器類
郵件解析引擎FastMail庫(kù)
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實(shí)體類
mime\MimeEntity.h
mime\MimeMessage.cpp 郵件解析MIME郵件類
mime\MimeMessage.h
mime\MimeObject.cpp 郵件解析MIME對(duì)象類
mime\MimeObject.h
mime\MimeParser.cpp 郵件解析工具類
mime\MimeParser.h
mime\MimeUtility.cpp 郵件解析工具類
mime\MimeUtility.h
郵件解析庫(kù)包含一系列的類,主要有MimeMessage(郵件實(shí)現(xiàn)類)、MimeBodyPart(郵件正文段體類)、MimeMultipart(郵件多部段體類)、InternetHeaders(郵件頭類)、InternetAddress(郵件地址類)和ContentType(段體類型類)等。解析和組裝郵件主要使用這些類進(jìn)行組裝和分解。
下面是所有的類的說(shuō)明:
類名 |
名稱 |
說(shuō)明 |
基類 |
ContentDisposition |
MIME郵件頭 |
實(shí)現(xiàn)MIME郵件頭的ContentDisposition |
|
ContentID |
MIME郵件頭 |
實(shí)現(xiàn)MIME郵件頭的ContentID |
|
ContentType |
MIME郵件頭 |
實(shí)現(xiàn)MIME郵件頭的ContentType |
|
MimeType |
MIME類型類 |
實(shí)現(xiàn)MIME的類型,記錄在ContentType里,如text/plain |
|
ConverterFactory |
編碼轉(zhuǎn)換工廠類 |
用于創(chuàng)建編碼轉(zhuǎn)換對(duì)象 |
|
ICodeConverter |
編碼轉(zhuǎn)換接口類 |
|
|
Base64Converter |
BASE64編碼類 |
BASE64的編碼和解碼 |
ICodeConverter |
QPConverter |
QP編碼類 |
Quote-Printable的編碼和解碼 |
ICodeConverter |
hdr |
MIME郵件頭類 |
實(shí)現(xiàn)MIME郵件頭HEADER行 |
|
HeaderTokenizer |
郵件頭分解類 |
實(shí)現(xiàn)分解MIME郵件頭的各元素,如Content-Type的mimetype和各個(gè)參數(shù)。 |
|
IMimePart |
MIME郵件段體接口類 |
郵件段體類的基類 |
|
MimeBodyPart |
MIME郵件段體類 |
實(shí)現(xiàn)MIME郵件各個(gè)段體的類 |
IMimePart |
MimeMessage |
MIME郵件類 |
MIME郵件主類 |
IMimePart |
IMultipart |
多部分接口類 |
多部分類的基類 |
|
MimeMultipart |
多部分實(shí)現(xiàn)類 |
保存段體類對(duì)象的多部分容器類 |
IMultipart |
InternetAddress |
MIME郵件地址類 |
實(shí)現(xiàn)MIME郵件地址的類 |
|
InternetHeaders |
MIME郵件頭部分類 |
實(shí)現(xiàn)保存MIME各郵件頭的容器類 |
|
MailDateFormat |
郵件時(shí)間轉(zhuǎn)換類 |
實(shí)現(xiàn)MIME郵件的格式的時(shí)間轉(zhuǎn)換 |
|
MailDateParser |
時(shí)間分解處理類 |
實(shí)現(xiàn)MIME郵件格式的時(shí)間的分解 |
|
MimeInitialization |
郵件解析全局初始化類 |
實(shí)現(xiàn)初始化MIME郵件用到的各個(gè)全局變量 |
|
MimetypesFileTypeMap |
郵件Mime類型映射類 |
實(shí)現(xiàn)郵件MimeType和FileType類型的映射表,用于查詢 |
|
MimeUtility |
MIME郵件分析工具類 |
實(shí)現(xiàn)郵件解析用到的各個(gè)解析工具函數(shù) |
|
ParameterList |
參數(shù)列表類 |
實(shí)現(xiàn)ContentType和ContentDisposition用到的參數(shù)列表 |
|
SystemProperty |
系統(tǒng)環(huán)境類 |
實(shí)現(xiàn)讀取系統(tǒng)環(huán)境參數(shù)的方法 |
|
UniqueValue |
郵件唯一值生成類 |
實(shí)現(xiàn)生成MIME郵件用到的唯一值的類,如boundary等 |
|

現(xiàn)在介紹一下最主要的也是提供主要的調(diào)用接口API的類MimeMessage。
MimeMessage提供了一系列的方法供調(diào)用者使用,如定義了獲取地址信息和獲取郵件正文內(nèi)容的結(jié)構(gòu)(可以為具體的數(shù)據(jù)也可以為一個(gè)MimeMultipart對(duì)象),用來(lái)實(shí)現(xiàn)RFC822和MIME規(guī)范。
一個(gè)MimeMessage對(duì)象里保存了一個(gè)郵件內(nèi)容數(shù)據(jù)(Content),以及一些記錄特定的郵件地址信息(如發(fā)件人(Sender)和收件人(recipients))的屬性(InternetHeaders)。還有關(guān)于這封郵件的結(jié)構(gòu)信息(structural information),以及它的郵件主體(body)的段體類型(Content-Type)。
下面用圖來(lái)描述一個(gè)MimeMessage對(duì)象內(nèi)部可能的結(jié)構(gòu):

。。。未完待續(xù)
[1]《JavaMail 1.2》
[2]《JavaMailTM API Design Specification Version 1.2》
[3]《C++網(wǎng)絡(luò)編程 卷1:運(yùn)用ACE和模式消除復(fù)雜性》
[4] http://www.faqs.org/rfcs/