TinyMail研究 郵件的表示與解析

2021-08-22 07:53:21 字數 1943 閱讀 9072

tinymail研究—郵件的表示與解析

作者****:李先靜

tinymail是一套針對移動裝置設計的郵件系統框架,為了達到最大的靈活性,它採用了很多設計模式和先進的程式設計技術,讓框架的每一部分都可以定製和配置。tinymail流行的趨勢非常明顯,nokia770/800和gpe phone edition等專案中都使用了它。因為我們也要開發郵件系統,所以花了幾天時間去研究它的實現,這裡記錄一些研究筆記,供有興趣的朋友參考。本文介紹一下郵件的表示與解析。

在tinymail中,表示郵件的類以及它們之間的關係如下圖所示:

camelobject是所有類的基類,它提供型別系統的實現、引用計數、signal機制等基本功能。

它提供了對資料物件的包裝,可以呼叫set_mime_type/ get_mime_type去設定/獲取資料物件的型別,可以呼叫write_to_stream/ decode_to_stream把資料物件寫到流中去,也可以呼叫construct_from_stream從流中構造資料物件。這些函式都是虛函式,可以在子類中過載。

camelmedium它提供了郵件的基本雛形:郵件頭和郵件體。可以呼叫add_header/ set_header/ remove_header/ get_header/ free_headers/ get_headers去操作郵件頭,可以呼叫set_content_object /get_content_object去訪問郵件體。

camelmimepart它代表mime郵件的乙個part,每個part都有自己的郵件頭來描述content-type和content-id等資訊,也都有自己的郵件體(通常是乙個檔案),所以它繼承了camelmedium介面。

camelmimemessage它代表乙個完整的mime郵件,它沒有自己的虛函式,只是實現了camelmedium定義的介面函式,幷包裝了一些實用的函式。

camelmultipart它代表multipart/*型別的mime-message的郵件體,可以呼叫add_part/add_part_at/remove_part/remove_part_at去增刪其中的camelmimepart物件,可以呼叫get_part/get_number去訪問中的camelmimepart物件。

camelmultipartsigned/camelmultipartencrypted它們實現了camelmultipart,用於表示mutlipart/signed和mutlipart/encrypted型別的multipart郵件。

下面是乙個建立郵件的例子:

create_mail.c

#include

<

string

.h>

#include

intmain

(int

argc

, char

* argv

)makefile

:export

pkg_config_path

=/usr/local/lib/pkgconfig

flags=-

g`pkg-config --libs --cflags camel-lite-1.2 glib-2.0`

all:

gcc $(flags) create_mail.c -o create_mail.exe

clean:

rm -f *.exe

郵件的解析是由camelmimeparser完成,它採用了基於棧的下推自動機實現。其狀態轉換如下圖所示:

使用TinyMail的API函式傳送郵件

乙個傳送郵件的簡單模型 int myrecieve void printf url s n camel url to string url,10 camelstore store camel store camel session get service connected session,url,...

VBA研究 如何篩選出重複的郵件號碼

客服人員發現地市分公司上報的理賠郵件有重複現象,但人工檢查重複非常麻煩,因為這些號碼不在乙個工作表中。為此我做了乙個小工具,可以一鍵列出excel檔案中所有工作表中重複的號碼。有了這個工具,不僅可以篩選重複郵件號碼,也可以用於篩選其他重複的東西,比如姓名 身份證號碼等等。1 工具介面 為了提高工具的...

谷歌員工罷工 CEO發郵件表示道歉並承諾支援罷工

程式設計驛站 www.cppcns.com 11月2日 訊息 據網易科技報道,本周四,谷歌發生全球罷工事件,其在新加坡 日本 以色列 瑞士 德國 英國和愛爾蘭的許多全球辦事處,共千名員工因 紐約時報 的一篇報道憤而進行 活動,該報道指控谷歌公司在處理性騷擾案件時包庇公司高管。罷工的組織者表示,他們對...