研究了一下Pop3的郵件接收協議,然後隨手寫了一個Pop3的郵件接收控件!Pop3的郵件協議實際上是很簡單的,知道那幾個命令就行了,與服務器之間的交互是一問一答得方式,控制起來也容易,相對而言郵件格式的解析倒是更加麻煩一點!於是也便順帶著將MIME郵件格式給熟悉了一下!總歸說來,規律性比較強,先獲取最大的頂層框架,然後根據頂層框架來判斷是否有還有子框架,依次根據給定的間隔符號迭代下來!看看類設計!首先一個MIME是要有一個郵件頭!所以這個類是必然的!
實現了郵件頭類TDxMIMEHeader ,然後再看郵件格式,就是數據部分了,數據部分就涉及到前面說的框架問題,有Mulpart/mixed等這樣的還有子框架的結構,也有單純的text /plain這樣的純文本結構,具體的信息都在郵件格式的頭部有說明,於是將數據Part設計成了一個繼承模式,TDxMIMEPart作為數據Part的基類,然後Mulpart/mixed,text/plain等這樣的各個模塊部分都從該類繼承,Mulpart/mixed等是有內部數據模塊的,所以這個另外繼承一個多數據模塊基類TDxMimeMulPart,然後只要含有多個數據模塊的模塊都從這個類繼承去實現,除此之外,還需要一個附件等流式數據的流模塊的解析類TDxMIMEStreamPart,本類主要是將附件等信息還原出來!大致信息如此,其實應該給模塊類還要設置一個模塊頭的類的,因為只是研究也就直接寫在裡面了!大致代碼塊如下:
(******************************************************)
(* 得閒工作室 *)
(* 郵件格式解析單元 *)
(* *)
(* DxMIMEParser Unit *)
(* String Operate Unit Version 1.x 2010/01/05 *)
(* Copyright(c) 2010 不得閒 *)
(* email:[email protected] QQ:75492895 *)
(******************************************************)
unit DxMIMEParser;
interface
uses Windows,Classes,SysUtils,DxEmailCommon,synacode,Registry;
type
//編碼
TContent_Transfer_Encoding = (TE_Base64, TE_Quoted_printable, TE_7bit, TE_8bit,TE_Binary);
//MIME郵件頭定義
TDxMIMEHeader = class(TPersistent)
private
HeaderList: TStringList;
function GetHeaderString: string;
procedure SetFrom(const Value: string);
function GetFrom: string;
function GetContent_Type: string;
procedure SetContent_Type(const Value: string);
procedure SetToPerson(const Value: string);
function GetToPerson: string;
function GetMessage_ID: string;
procedure SetMessage_ID(const Value: string);
function GetMimeVer: string;
procedure SetMimeVer(const Value: string);
function GetSubject: string;
procedure SetSubject(const Value: string);
function GetDateTime: TDateTime;
procedure SetDateTime(const Value: TDateTime);
public
constructor Create;
destructor Destroy;override;
function GetFieldValue(FIEld: string): string;
procedure SetFieldValue(FIEld: string;Value: string);
property From: string read GetFrom write SetFrom;//來自誰
property Content_Type: string read GetContent_Type write SetContent_Type;
property ToPerson: string read GetToPerson write SetToPerson;//發送給誰
property Message_ID: string read GetMessage_ID write SetMessage_ID;
property Mime_Ver: string read GetMimeVer write SetMimeVer;//版本
property Subject: string read GetSubject write SetSubject;//題目
property DateTime: TDateTime read GetDateTime write SetDateTime; //發送時間
property HeaderString: string read GetHeaderString;
end;
//MIME段
TDxMIMEPart = class(TPersistent)
private
PartList: TStringList;
SplitStr: string;
FContent_Transfer_Encoding: TContent_Transfer_Encoding;
FTopType: string;
FContent_Type: string;
FContent_Disposition: string;
FContent_ID: string;
FContent_Base: string;
FContent_Location: string;
procedure SetContent_Type(const Value: string);
procedure SetContent_Disposition(c
[1] [2] [3] [4] 下一頁