本人目前在嘗試做這樣一個東西,目的是可以在打開電腦聯網時自動讀取未讀的郵件,提醒用戶并且可以直接用軟體自帶的決議模塊決議郵件,防止用戶忽略一些重要的郵件。
目前已經完成的功能:
(1)能夠對MIME協議的兩種編碼方式BASE64和Quoted-Printable編碼的郵件內容正確地進行決議(包括正文和附件),已經通過多個郵箱多封郵件驗證;
(2)能夠正確地分離郵件頭和郵件內容;
其他次要的就不說了。
目前需要改進的功能:
(1)對郵件頭的某些屬性不能完全正確地分段。例如:有些郵件的Subject、Content-Type屬性值可能超過一行,那么如果按換行符作為屬性值結束的標致就不完整;于是我自然而然地想到了以至少一個換行符和冒號作為結束標致,然后去掉最后一個換行符之后的內容,但是目前不敢肯定這種想法,因為屬性值中既有換行符同時也出現冒號怎么辦?(不知道有沒有這種可能性,因為一般Subject都是經過編碼的,冒號不會出現);后來我又想到了一種判斷方法,那就是通過驗證換行符后是否出現標準的MIME協議中規定的屬性名稱,例如From后面一般會出現To等等,只要前一個屬性名稱后出現標準協議中規定的屬性名稱中的任何一個則認為屬性值結束。起初我以為這個想法應該萬無一失了,結果發現并不是所有的POP服務器都是完全遵照MIME協議標準的,一般都附有服務器自帶的屬性名稱,萬一恰恰我關心的幾個屬性From,To,Subject,Content-Type中后面跟了一個我的軟體中沒有約定的屬性名稱,那就歇菜了。我本人對MIME協議不是理解得很透徹,網上資料也不多,所以我不確定是不是符合MIME協議的郵件的頭中除了Date屬性外,其余屬性的屬性值都不允許直接出現冒號,否則需要進行編碼操作,這樣可以確保決議郵件時不會出現意外。這是我的一個猜測,目前沒被推翻,但不知道實際情況是否如此?所以請對這方面有研究的大俠冒個泡討論下吧!
(2)不同字符集之間的轉換。我使用的是VB6.0的開發環境,有點落伍了,呵呵。所以轉碼什么的用的都是StrConv這個函式,貌似還沒有出現什么字符不能顯示的問題(我接觸的郵件字符集目前只有GBK和GB18030兩種,其他的暫時還沒遇到)。但是總覺得不對字符集進行分析有些欠妥,但又找不到好的解決方案,望各位大俠不吝賜教!
目前尚未完成的功能:
對郵件內容自動進行合理地分段,確保能夠合理地分開郵件的正文和附件(目前是手工分的)。但是解決的思路是有的,那就是根據----=和--這兩個關鍵標記用正則運算式或者自己直接比較ASCII編碼來實作自動分段,主要難度是要注意處理好分段標記的嵌套問題和演算法的效率。感覺用正則好像不是特別好(其實也因為本人對正則運算式的使用水平很不到家),所以初步考慮還是用比較ASCII編碼的方式進行分段。
其他一些人性化的設計,目前好沒有這方面的考慮,先解決上面的主要問題吧。
還有一個最最關鍵的問題,做這樣一個東西到底有沒有意義?或者說是不是有人已經做了這樣的東西了(當然作為一個鍛煉編程水平的東西還是不錯的)?另外,正如文章標題所說的,做出這樣的東西能不能做到一種通用性,即根具體的郵箱服務器無關,只要是基于MIME協議就行?以上任何問題,只要您要自己的見解,都歡迎您做出論述,為小弟指點迷津,多謝!
uj5u.com熱心網友回復:
直接給Outlook做二次開發就可以了,google MAPI。uj5u.com熱心網友回復:
謝謝你讓我知道了有這樣一個編程介面。問題是如果對方機子上沒有Outlook或者不根本想裝Outlook怎么辦?還有就是這個MAPI是微軟的標準,是否具有代表性呢?我其實想從MIME協議上去思考這個問題,所以最好是直接跟這個協議相關的資料,謝謝!uj5u.com熱心網友回復:
MIME不是協議,只是一種格式,哥哥。uj5u.com熱心網友回復:
可以說是格式,也可以說是協議,不矛盾的,側重點不同而已。百度結果:多用途網際郵件擴充協議(MIME)是 Multipurpose Internet Mail Extensions 的縮寫,說明了如何安排訊息格式使訊息在不同的郵件系統內進行交換。 MIME 的格式靈活,允許郵件中包含任意型別的檔案。 MIME 訊息可以包含文本、圖象、聲音、視頻及其它應用程式的特定資料。
另外上面的決議郵件頭的問題已經解決了,現在主要的難題是字符集的轉換問題。我發現編碼方式為GB2312,GBK,GB18030的用StrConv轉換后都可以正常顯示,但是UTF-8不行,需要自己轉碼,目前正在研究這個問題。
uj5u.com熱心網友回復:
你可以參考: http://blog.csdn.net/chenjl1031/article/details/6059767uj5u.com熱心網友回復:
恩,謝謝!正是我需要的。uj5u.com熱心網友回復:
代碼能分享下么,我想學習你怎么寫的,[email protected] 謝謝
uj5u.com熱心網友回復:
代碼比較長,一共兩個類模塊。一個負責解碼,一個負責決議郵件。目前還差一個字符集的轉換。你要的話,那我就發給你看下吧。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/155951.html
標籤:網絡編程
