?? 編寫你的電子郵件軟件 (2000年11月24日).txt
字號:
編寫你的電子郵件軟件 (2000年11月24日)
本站更新 分類: 作者:中國程序員網站 推薦: 閱讀次數:634
(http://www.codesky.net)
--------------------------------------------------------------------------------
如果你每天上網,那么你肯定每天要使用電子郵件軟件,有沒有想過寫一個屬于自己的電子郵件軟件,
用自己寫的軟件來收信和發信,那種感覺肯定很好。
眾所周知,Delphi這個windows開發平臺中的貴族可以開發各個方面的應用程序,當然基于internet的
程序用它開發也是得心應手。
從Delphi3開始,它自己的控件中就有了基于interent開發的控件,不過這些控件不是Delphi本身的vcl
控件,而是ActiveX控件,這樣多多少少對于應用程序的發布不是很方便。好在借助于Delphi強大的控件技
術,我們可以從internet上找到很多免費的vcl控件來幫助我們寫電子郵件軟件,比較有名的是ics控件組和
sakemai控件組。Ics是一個全面的internet程序解決方案,而sakemail是專門用來開發電子郵件軟件的控
件。本文就是要介紹如何使用sakemail控件來寫支持POP3和SMTP協議的收信和發信程序。
一、下載和安裝
sakemail在很多著名的Delphi站點都可以下載sakemail控件,比如www.torry.ru。在Delphi中安裝
sakemail是很簡單的,先將下載的zip文件釋放在你指定的目錄中,在Delphi中選擇打開文件,設定文件類
型為dpk,然后選擇目錄下的emaildak.dpk文件,選擇compile,然后install就行了。安裝完后,會在控件
的internet頁中添加4個相應的控件。
二、收信程序
讓我們先來看看利用POP3協議收信的范例程序是如何來寫的。
從這個設計時的畫面(如圖1)看到,收信主要利用sakemail的sakmsglist和sakpop控件。讓我們來看看關鍵
的按鈕“Connect and retrieve msgs”后面的代碼。
procedure TForm1.CntClick(Sender: TObject);
begin
//指定服務器
SakPOP1.Host := EditHost.text;
//指定用戶名稱
SakPOP1.UserId := EditUserId.text;
//指定用戶密碼
SakPOP1.Passwd := EditPasswd.text;
StatusBar1.Panels[0].text := 'Wait a moment, please...';
SakPOP1.connect;//連接服務器
if SakPOP1.POPError then //連接服務器失敗
begin
MessageDlg( 'Connect failed. Maybe the server is down or not responding.',
mtError, [mbOk], 0);
exit;
end;
if not SakPOP1.login then //登陸服務器失敗
begin
ShowMessage('Unauthorized access...');
exit;
end;
//顯示共有多少電子郵件
showMessage( 'You have ' + intToStr( SakPOP1.Init) + ' new msg(s) of ' +intToStr(
SakPOP1.MsgsCount));
BtnCancel.Enabled := true;
//接受電子郵件
sakPOP1.retrieveAllMessages( SakMsgList1);
BtnCancel.Enabled := false;
SakPOP1.quit; //退出POP3連接
if SakMsgList1.count > 0 then
begin
currentMsg := 0;
showCurrentMsg; //顯示當前的電子郵件內容
end;
StatusBar1.Panels[0].text := 'Done. ' + intToStr( SakMsgList1.count) + ' msgs
retrieved.';
end;
在上面的程序中,我們已經加入了比較詳細的注釋。利用sakemail的控件來收取信件基本上有以下幾個步
驟:
1.服務器連接的準備工作。你需要制定服務器的域名、用戶名和密碼。用以下語句實現:
SakPOP1.Host:=EditHost.text;
SakPOP1.UserId:=EditUserId.text;
SakPOP1.Passwd:=EditPasswd.text;
2.服務器連接。在這個階段如果一切正常,你只需要等待幾秒,但是如果服務器地址錯,或者用戶名和密碼
錯誤,則會退出,需要重新連接。用以下語句實現:SakPOP1.connect3.獲得郵件的數量。這是通過語句
SakPOP1.MsgsCount來獲得的。
3.從服務器將郵件傳送到本地。
顯示一封電子郵件由以下的過程完成:
//顯示當前的郵件
procedure TForm1.showCurrentMsg;
var msg: TSakMsg;
i: integer;
begin
msg := SakMsgList1.items[ currentMsg];
labelMsgId.Caption := msg.MessageId;
labelInReplyTo.Caption := msg.InReplyTo;
labelFrom.caption := msg.From;
labelTo.caption := msg.SendTo;
labelSubject.caption := msg.Subject;
labelDate.caption := msg.Date;
labelReplyTo.Caption := msg.ReplyTo;
memo1.text := msg.Text.Text; {msg.Text is a StringList}
if msg.AttachedFiles.Count > 0 then
begin
comboBoxAttach.items.clear;
for i := 0 to msg.AttachedFiles.Count-1 do
comboBoxAttach.items.add( msg.AttachedFiles[ i].fileName);
comboBoxAttach.enabled := true;
comboBoxAttach.itemIndex := 0;
buttonSave.enabled := true;
end
else
begin
comboBoxAttach.enabled := false;
buttonSave.enabled := false;
end;
end;
從上面的過程我們可以看到顯示一個電子郵件的內容的程序并不復雜,正文內容直接交給memo來顯示,如果
有附件的話,讀出附件的數量,然后將其文件名寫入combo box中。收信程序的框架就大致如此了(如圖
2)。下面我們來看看發信程序。
三、發信程序
單純的發信程序很簡單,我們來看看“send”按鈕背后的代碼:
//發信
procedure TForm1.ButtonSendClick(Sender: TObject);
begin
screen.cursor := crHourGlass;
StatusBar1.Panels[0].Text := 'Wait a moment, please';
SakSMTP1.host := EditHost.text; //指定地址
SakMsg1.UserName := EditUserName.text;
//以下指定發送人有關信息
SakMsg1.From := EditFrom.text;
SakMsg1.SendTo := EditTo.text;
SakMsg1.Subject := EditSubject.text;
SakMsg1.Text.Assign( Memo1.Lines);//信件正文
SakSMTP1.connect;//連接服務器
if not SakSMTP1.SMTPError then
begin
BtnCancel.Enabled := true;
SakSMTP1.SendMessage( SakMsg1);
BtnCancel.Enabled := false;
SakSMTP1.quit;
StatusBar1.Panels[0].Text := SakSMTP1.ReplyString;
end;
screen.cursor := crDefault;
end;
發信有以下幾個步驟:
1.指定發送郵件相關的信息,比如服務器地址、發信人等。
2.服務器連接。
3.如果連接正常,發送電子郵件。
利用SakeMail我們可以看到發信的步驟是比較簡單的。同時sakemail的發信控件提供了很多的控件,比如發
信前、發信后、解碼過程中等,可以讓你很好的控制發信的整個過程。同樣收信控件也具有相應的這些事
件。
四、電子郵件程序需要注意的其它問題。
我們從以上的分析可以看出利用sakemail這個優秀的電子郵件引擎,我們也可以寫出具有自己特色的電
子郵件軟件或者讓自己的應用程序輕易地具有電子郵件功能。不過如果你像要寫一個真的可以用的電子郵件
軟件,至少還應該具有以下的設計和功能:
1.對于電子郵件的儲存和查找功能。不能保存郵件的電子郵件軟件是沒有實際使用價值的,同樣在這個
信息爆炸的時代,你的程序必須具有良好的查詢功能,讓使用者快速地找到需要的信息。
2.多帳戶功能。越來越多的免費電子郵件使得支持多帳戶功能成為我們選擇電子郵件軟件的一個基本特
性。多帳戶功能增加了程序設計的復雜性。
3.完備的郵件過濾功能。隨著越來越多的信息通過電子郵件的形式發送過來,如果不能建立起一套完備
的過濾功能,那么有些重要的郵件一旦被疏忽,影響可能很大。所以你的電子郵件程序應該具有一點人工智
能,能自動過濾、自動挑選甚至自動恢復指定的電子郵件。
4.文件格式的支持。Html格式的電子郵件可以具有更好的表現形式,因此你應該支持Html格式的電子郵
件。另外,因為很多的電子郵件附件是zip格式,如果你的電子郵件程序內部直接支持察看zip格式以及釋放
操作,就更加錦上添花了。
以上簡要概括地談了一些作者自己開發Email程序的看法和經驗,希望對于有興趣于開發電子郵件程序的
朋友有所幫助。
本文來自中國程序員網站
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -