摘要:介紹了電子郵件的工作原理以及SMTP、POP3協(xié)議,描述了MIME協(xié)議的編碼以及解碼的過程,分析了Indy組件的應(yīng)用,講解了自動生成Excel表的過程以及電子郵件在物業(yè)管理系統(tǒng)中的應(yīng)用。
關(guān)鍵詞:電子郵件;SMTP;POP3;MIME;Indy;Excel
中圖分類號:TP393.098文獻標(biāo)識碼:A文章編號:1009-3044(2010)05-1108-03
E-mail Sending and Receiving System Based on Indy
GUO Jie-feng, Li Feng
(Daqing Petroleum College of Applied Technology College Computer Center, Qinhuangdao 066004,China)
Abstract: In this paper,it introduced the principle of E-mails, as well as SMTP and POP3 protocols.At the same time,it described the MIME protocol and its coding and decoding process.The application of Indy component are analysised, and it explained the process of automatic generation of Excel tables and e-mail applying in the Property Management System.
Key words:E-mail; SMTP; POP3; MIME; Indy; Excel
電子郵件,又稱E-mail,它是一種通過電子手段提供信息交換的通信方式。隨著現(xiàn)在互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展和網(wǎng)絡(luò)技術(shù)的不斷創(chuàng)新,由于傳遞迅速,使用方便,費用低廉等原因,使用電子郵件的用戶越來越多。筆者在為北京某物業(yè)中心開發(fā)物業(yè)管理系統(tǒng)的過程中,由于物業(yè)客服與物業(yè)管理層不在一個局域網(wǎng)內(nèi),為了方便物業(yè)客服與物業(yè)管理層進行物業(yè)材料使用情況的數(shù)據(jù)傳輸,在該系統(tǒng)中嵌入了收發(fā)電子郵件的程序模塊,并在后臺自動把SQL Server的相關(guān)數(shù)據(jù)導(dǎo)出到Excel中,并且作為附件發(fā)送給物業(yè)管理層人員。開發(fā)工具為Delphi7,編寫電子郵件收發(fā)的模塊使用的是Delphi7自帶的Indy9組件,后臺數(shù)據(jù)庫為SQL Server。
1 電子郵件簡介
1.1 電子郵件的工作原理
電子郵件是通過計算機進行信息交換的電子媒體,基于客戶/服務(wù)器模式,通信使用TCP/IP協(xié)議。
1.2 收發(fā)電子郵件
用戶在收發(fā)電子郵件之前,要先確保計算機已經(jīng)聯(lián)網(wǎng)。發(fā)信方編寫好郵件內(nèi)容后,通過客戶端應(yīng)用程序與SMTP郵件服務(wù)器連接,連接成功后,使用SMTP協(xié)議發(fā)送郵件信息到SMTP郵件服務(wù)器,SMTP服務(wù)器通過網(wǎng)絡(luò)上其它SMTP服務(wù)器將郵件傳輸?shù)絇OP3服務(wù)器。POP3郵件服務(wù)器將接收來的郵件發(fā)送到收信人郵箱。收信方用戶通過客戶端應(yīng)用程序與POP3郵件服務(wù)器連接,將自己郵箱里的信件下載到本地計算機上,完成接收郵件的服務(wù)。
1.3 SMTP協(xié)議
SMTP協(xié)議是Simple Mail Transfer Protocol的簡稱,負(fù)責(zé)將郵件信息從客戶機傳輸?shù)竭h程郵件服務(wù)器,再由一個郵件服務(wù)器傳輸?shù)搅硪粋€郵件服務(wù)器。
1.4 MIME編碼
MIME是Multipurpose Internet Mail Extensions的簡稱,即多用途郵件擴展協(xié)議,用來傳輸附件中的非文本文件。
1.5 POP3協(xié)議
POP3協(xié)議是Post Office Protocol的簡稱,該協(xié)議允許客戶機從遠程郵件服務(wù)器上接收郵件。
1.6 MIME解碼
MIME解碼過程是其編碼的逆過程。解碼附件是將附件中的ASCII文本還原成原來的格式文件。
2 郵件發(fā)送應(yīng)用程序的設(shè)計
2.1 初始化用戶界面
新建發(fā)送郵件窗體,在其中加入TIdMessage,TIdSMTP,TOpendialog等組件,并設(shè)置界面。TIdSMTP,用來實現(xiàn)與SMPT服務(wù)器的連接與通信,TIdMessage用來對郵件內(nèi)容進行存儲與編碼。設(shè)置郵件參數(shù)的界面如圖1所示。
2.2 設(shè)置SMTP服務(wù)器屬性
TIdSMTP組件的host屬性用來指定客戶端所要連接的遠程SMTP服務(wù)器地址。例如網(wǎng)易的SMTP服務(wù)器是smtp.163.com,新浪的是smtp.sina.com.cn,263個人用戶的是smtp.263.net。SMTP服務(wù)器的默認(rèn)端口是25,因此port屬性設(shè)置為25。
2.3 用戶身份認(rèn)證
現(xiàn)在所有SMTP服務(wù)器都需要用戶身份驗證,只有提供用戶名和密碼才能登錄SMTP服務(wù)器。需要把TIdSmtp對象的AuthenticationType屬性賦值為atLogin。TIdSMTP組件的username屬性和password屬性分別用來指定SMTP服務(wù)器登錄時的用戶名和密碼。
2.4 加入郵件信息
一封完整的電子郵件應(yīng)由郵件頭和郵件內(nèi)容組成。郵件頭用來說明發(fā)信人地址,收信人地址,發(fā)信人寫信時間,主題,郵件抄送地址等信息,郵件內(nèi)容包含郵件正文內(nèi)容和附件內(nèi)容。所加入的郵件信息都需要賦給TIdMessage的相關(guān)屬性。具體如下:
TIdMessage對象的Body屬性使用asign方法添加郵件正文,把發(fā)信方郵件地址賦值給From屬性的text屬性,把收信方郵件地址賦值給Recipients屬性的EMailAddresses屬性,把郵件主題賦值給Subject屬性,把郵件的發(fā)送優(yōu)先級別賦值給Priority屬性,把抄送人郵件地址賦值給CCList屬性的EMailAddresses屬性, 使用TIdAttachment對象的Create方法來添加附件。如果需要增加多個抄送人,可使用CCList屬性的add方法添加。
2.5 連接SMTP服務(wù)器
加入郵件信息完畢,還要判斷是否與SMTP郵件服務(wù)器連接。如果已經(jīng)連接,就斷開原來的連接,確保SMTP服務(wù)器對用戶身份的驗證。發(fā)送成功之后,需要斷開SMPT服務(wù)器的連接。使用TIdSmtp對象的Connect方法連接SMTP服務(wù)器,Send方法發(fā)送電子郵件,Disconnect方法斷開與SMTP服務(wù)器連接。
2.6發(fā)送電子郵件
設(shè)置好各種參數(shù)后,就可以通過電子郵件上傳數(shù)據(jù)了。在上傳的過程中,自動執(zhí)行存儲過程把數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)導(dǎo)出到Excel表中,并作為附件上傳。上傳數(shù)據(jù)的界面如圖2所示。
傳輸?shù)母郊沙绦蜃詣由桑蒃xcel表的函數(shù)如下:
procedure Tdcyzsjf.WriteExcel(Ads: TADOquery; sName, Title: string);
var
ExcelApplication1: TExcelApplication;
ExcelWorkbook1: TExcelWorkbook;
ExcelWorksheet1: TExcelWorksheet;
filename: string;
i, j: integer;
begin
filename := concat(sName, '.xls');
try
ExcelApplication1 := TExcelApplication.Create(Application);
ExcelWorkbook1 := TExcelWorkbook.Create(Application);
ExcelWorksheet1 := TExcelWorksheet.Create(Application);
ExcelApplication1.Connect;
except
Application.Messagebox('Excel沒有安裝','Hello',MB_ICONERROR + mb_Ok);
Exit;
end;
try
ExcelApplication1.Workbooks.Add(EmptyParam, 0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
Ads.First;
for j := 0 to Ads.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[1, j + 1] := Ads.Fields[j].DisplayLabel;
ExcelWorksheet1.Cells.item[1, j + 1].font.size := '10';
end;
for i := 2 to Ads.RecordCount + 1 do
begin
for j := 0 to Ads.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[i, j + 1] :=''''+Ads.Fields[j].Asstring;
ExcelWorksheet1.Cells.item[i, j + 1].font.size :='10';
end;
Ads.Next;
end;
ExcelWorksheet1.Columns.AutoFit;
ExcelWorksheet1.SaveAs(filename);
Application.Messagebox(pchar('數(shù)據(jù)成功導(dǎo)出'+filename),'Hello',mb_Ok);
finally
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
ExcelWorksheet1.Free;
ExcelWorkbook1.Free;
end;
end;
3 郵件接收應(yīng)用程序的設(shè)計
3.1 初始化界面
在接收郵件窗體中,加入TIdPOP3、TIdMessage、TTreeview等組件。TIdSMTP,TIdPOP3用來實現(xiàn)與POP3服務(wù)器的連接與通信,TIdMessage用來對郵件內(nèi)容進行存儲與編碼。接收電子郵件的參數(shù)設(shè)置參見圖1。
3.2 設(shè)置POP3服務(wù)的服務(wù)器屬性
TIdPOP3組件的host屬性用來指定客戶端要連接的遠程POP3服務(wù)器的地址。網(wǎng)易的POP3服務(wù)器是pop3.163.com,新浪的是pop3.sina.com.cn,263個人用戶的是263.net。POP3服務(wù)器的默認(rèn)端口是110,因此port屬性設(shè)置為110。
3.3 用戶身份驗證
所有POP3服務(wù)器都需要用戶身份驗證,只有提供用戶名和密碼才能登錄POP3服務(wù)器。TId POP3組件的username屬性和password屬性分別用來指定POP3服務(wù)器登錄時的用戶名和密碼。
3.4 連接POP3服務(wù)器
判斷是否已經(jīng)連接到POP3服務(wù)器,如果已連接到服務(wù)器,則斷開原來的連接,確保POP3服務(wù)器對用戶身份的驗證。使用Connect方法連接POP3服務(wù)器,Login方法登錄POP3服務(wù)器。
3.5 接收郵件
先設(shè)定好文件存儲路徑。接收郵件時需要判斷接收的是正文還是附件。如果接收的是正文,則解碼正文后保存,如果接收的是附件,則解碼附件,并通過判定附件的后綴名分析其文本格式,并進行格式還原后保存。在本系統(tǒng)中,下載電子郵件和附件以及把附件里的材料數(shù)據(jù)附加到數(shù)據(jù)庫中都是在程序代碼中自動實現(xiàn)。
4 結(jié)束語
目前,此電子郵件收發(fā)系統(tǒng)模塊已經(jīng)成功的嵌入在物業(yè)管理系統(tǒng)中,得到了很好的應(yīng)用。用戶可以很方便的接收物業(yè)管理系統(tǒng)中的物業(yè)材料使用情況的數(shù)據(jù),并導(dǎo)入到數(shù)據(jù)庫中進行數(shù)據(jù)分析。
參考文獻:
[1] 曹麒麟,張千里.垃圾郵件與反垃圾郵件技術(shù)[M].北京:人民郵電出版社,2003.