顯示郵件控件詳細(xì)設(shè)計
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
目錄
一、 需求設(shè)計………………………..2 1、需求:…………………………….2 2、設(shè)計:…………………………….2 二、 分析發(fā)件人…………………….2 三、 分析收件人…………………….3 四、 分析日期………………………..3 五、 分析主題………………………..3 六、 分析附加………………………..3 七、 分析郵件內(nèi)容…………………4 附1、Quoted-Printable解碼…..5 一、需求設(shè)計 1、需求: 由于在內(nèi)容恢復(fù)中的SMTP和POP3需要利用OUTLOOK打開查看郵件,導(dǎo)致每次都要彈出新的窗口。如果做成控件或者就是VB程序中的一部分,效果會很好。 2、設(shè)計: 根據(jù)郵件格式,進行分析,具體需要分析的內(nèi)容有: (1).發(fā)件人; (2).收件人; (3).日期; (4).主題; (5).附加; (6).郵件內(nèi)容。 由于是做界面效果,所以建議用VB制作,因為VC都需要自畫,效果不如VB。可以做成控件,或者就是管理器的一部分代碼也可以。如果是控件,則可以把一個MAIL文件給控件,控件負(fù)責(zé)分析,顯示功能。 二、分析發(fā)件人 例如:From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> 首先是根據(jù)“From:”來找到發(fā)件人。 1.沒有“From: ”,則顯示“未指定發(fā)件人”。 2.例如:From: masterlee 直接顯示“masterlee”。 3.例如:From: lijt@neusoft.com 直接顯示“l(fā)ijt@neusoft.com”。 4.例如:From: masterlee<lijt@neusoft.com> 直接顯示“masterlee”。 5.例如:From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> 對于這種情況,前面的“?B?”表示是以BASE64編碼,需要解碼后顯示“李經(jīng)通”。 有的是“?Q?”表示是Quoted-Printable編碼,和BASE64處理方法一樣,解碼后顯示。不顯示后面的具體郵件地址。 (附1:Quoted-Printable解碼) 6.例如: From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> 有多個“From: ”時,兩個都顯示“李經(jīng)通;李經(jīng)通”。中間用“;”號隔開。 7.第一行沒有信息,而在下一行: From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> 第二行顯示先是一個空格,后面是具體內(nèi)容。分析同上(2-6) 8.多行情況: From: =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com>, =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> =?gb2312?B?wO6+rc2o?= <lijt@neusoft.com> 從第二行開始,前面都有個空格。表示是屬于“From”的內(nèi)容。需要全部顯示“李經(jīng)通;李經(jīng)通;李經(jīng)通”。 9、 在VB中使用TEXTBOX控件。需要設(shè)置成多行。 注:參考RFC2045、RFC2047。 三、分析收件人 收件人是根據(jù)“T ”來判斷的,如果沒有“T ”,則顯示“無”。 其他處理見收件人的2-9。 四、分析日期 1.日期是根據(jù)“Date: ”來判斷的。如果沒有“Data: ”,則顯示本機日期。 顯示格式“2002年4月14日 15:41” 2.例如“Date: Sun, 14 Apr 2002 12:59:10 +0800”需要轉(zhuǎn)換成“2002年4月14日 12:59” 3.兩行的情況 Date: Sun, 14 Apr 2002 12:59:10 +0800 第二行,先是一個空格。同2,分析后面的數(shù)據(jù)。 4.在VB中使用LABEL控件即可。 五、分析主題 1.主題是根據(jù)“Subject: ”來判斷,如果沒有,則顯示“(無主題)”。 2.例如:“Subject: test”直接顯示“test”。 3.帶有編碼的主題,需要解碼后顯示。有兩種編碼:BASE64和Quoted-Printable。 “Subject: =?gb2312?B?08q8/g==?=”解碼后顯示為“郵件”。 4.多行情況: 例如1: Subject: =?UNKNOWN?B?sb7VvszhuanX47LKyO28/sbGveK088irwbS902h0dHA6Ly9yZHp4LnhpbHViYnMuY29t?= 例如2: Subject: =?gb2312?B?MTAuMS4xLjIzNM/W1NrKx7fAu/DHvbLiytTX6dX91NrKudPDtcRJUCzH6w==?= =?gb2312?B?1bzTw7XEys23xdK7z8Iu?= 后面的行有一個空格,處理的時候,如果有編碼就解碼,沒有就連在一起直接顯示。 5.在VB中使用TEXTBOX控件。 六、分析附加 1. 判斷附件: 如果在郵件里有這些信息,那么就可以判斷是否有附件了。 格式一: Content-Type: text/plain Content-Disposition: inline(附件) Content-Description: text-part-1 Some text goes here 格式二: –outer Content-Type: multipart/mixed; boundary=inner(說明是有多部分組成) Content-Disposition: attachment(有附件) Content-Description: multipart-2(附件是多個) –inner Content-Type: text/plain Content-Disposition: inline(附件一) Content-Description: text-part-2 Some more text here. –inner Content-Type: image/jpeg Content-Disposition: attachment(附件二) Content-Description: jpeg-1 –inner– –outer– 這里需要進行字符串匹配。 附件的判斷是根據(jù): Content-Disposition: attachment; Content-Disposition: inline; 注:參考RFC1806、RFC2183。 2.處理方法: a) 確定編碼格式(RFC1555) Content-transfer-encoding: BASE64 | Quoted-Printable b) 確定文件名 Content-Disposition: attachment;filename="example.txt" 或:(有的文件名進行了編碼) Content-Disposition: attachment; filename="=?gb2312?B?TmV0RXllzfjC58q1yrG84L/Yz7XNszEuZXhl?=" 然后按照編碼把附加的內(nèi)容解碼,并按照文件名保存在臨時目錄中。 3. 在VB中,可以使用FILELISTBOX控件或者是LISTVIEW控件。這里需要增加右鍵菜單功能,實現(xiàn):打開、另存為、全部保存。如果沒有附件,就不顯示這個控件。 七、分析郵件內(nèi)容 1、例如: From: Nathaniel Borenstein <nsb@bellcore.com> TNed Freed <ned@innosoft.com> Subject: Formatted text mail MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=boundary42 –boundary42 Content-Type: text/plain; charset=us-ascii …plain text version of message goes here…. –boundary42 Content-Type: text/richtext …. richtext version of same message goes here … –boundary42 Content-Type: text/x-whatever …. fanciest formatted version of same message goes here … –boundary42– 處理方法: a) 編碼方法 Content-Transfer-Encoding := "BASE64" / "QUOTED-PRINTABLE" b) 文件類型 Content-type: text/plain; charset=us-ascii Content-Type: text/richtext Content-Type: text/x-whatever Content-Type: text/html; 等等。 根據(jù)編碼,先解碼,然后保存成相應(yīng)的文件,一般兩種,*.txt和*.html。 c) 對于alternative,即相同的內(nèi)容,不同的文件格式,如果有HTML,則以HTML顯示,如果沒有,則以TXT或其他顯示。 2、郵件的內(nèi)容格式是多樣的,有的附件,有的沒有。有的進行了編碼,有的沒有。有的郵件是簡單的一快內(nèi)容,有的是多個組合的。所以進行分析時要考慮到所有的情況。根據(jù)RFC文檔進行詳細(xì)分析。 3、VB中使用WebBrowser控件,把臨時文件打開即刻。 附1、Quoted-Printable解碼 int quoted_to_str(const char *src, char *target, int targsize) { int srclen; int i, j; char ch, ch1, ch2; unsigned char hz; srclen = strlen(src); for(i = 0, j = 0; i < srclen || j < targsize ; i++, j++) { ch = src; if (ch == ‘=’) {ch1 = src[++i]; ch2 = src[++i]; hz = (ch1>’9′?ch1-’A'+10:ch1-’0′)*16+(ch2>’9′?ch2-’A'+10:ch2-’0′); target[j] = hz;} else target[j] = ch; } return j; } 該文章在 2012/2/17 0:33:14 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |