平時你使用的是什麼工具寄送電子郵件?是Outlook,Foxmail或是其它?無論以前是什麼,現在你都可以多一種選擇:使用自己編寫的郵件發送程式。而且對於Delphi來說,要完成它是如此的簡單,那就讓我們動手吧!
構件組成
Delphi 5構件板的FastNet頁中,提供了TNMSmtp構件,它的功能就在於將郵件發送到指定的郵件伺服器。其最常用的屬性和方法如下:
Host:SMTP郵件伺服器的地址,如SMTP.SINA.COM.CN
Port:SMTP郵件伺服器的連接埠號碼,一般用其預設值25即可
UserID:使用者名稱,當與郵件伺服器建立串連時,需驗證使用者名稱
PostMessage.FromAddress:寄件者地址
PostMessage.ToAddress:收件者地址
PostMessage.Attachments:郵件附件的檔案清單
PostMessage.Body:郵件的本文
PostMessage.Subject:郵件的主題
Connect方法:建立與SMTP伺服器的串連,串連前需指定Host和UserID
Disconnect方法:斷開與伺服器之間的串連
SendMail方法:將當前郵件發送到伺服器
當然,TNMSmtp構件還有很多其它的屬性、方法、事件,在這裡我們不作介紹,需要時大家可以查閱相關資料或Delphi的協助資訊。
實現方式
首先在Form1中加入相應的TLabel、TEdit、TMemo、TButton、TListBox、TOpenDialog和TNMSmtp構件。其中,TMemo用於書寫郵件內容,TListBox顯示附件項目,TOpenDialog(檔案開啟對話方塊)用於選擇附件檔案,按鈕Button1添加附件,按鈕Button2串連伺服器並發送郵件。程式的具體代碼如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then ListBox1.Items.Add(OpenDialog1.FileName);
//將選擇的檔案項添加到ListBox1中,作為附件
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
NMSmtp1.Host:=Edit3.Text; //SMTP伺服器位址
NMSmtp1.UserID:=Edit4.Text; //你在對應伺服器上的註冊使用者名稱
NMSmtp1.Connect; //與伺服器建立串連
NMSmtp1.PostMessage.FromAddress:=Edit5.Text; //寄件者的郵件地址
NMSmtp1.PostMessage.Subject:=Edit2.Text; //郵件主題
NMSmtp1.PostMessage.ToAddress.Add(Edit1.Text); //收件者的郵件地址
NMSmtp1.PostMessage.Attachments.AddStrings(ListBox1.Items); //附件
NMSmtp1.PostMessage.Body.Assign(Memo1.Lines); //郵件的本文
NMSmtp1.SendMail; //發送郵件
NMSmtp1.Disconnect; //中斷連線
ShowMessage('發送完畢!'); //發送完時顯示提示資訊
end;
以作者為例:我的一個郵箱為dyhuyz@163.com,利用SMTP.163.com郵件伺服器向《中國電腦教育報》編輯部發信時,在Edit1中填入編輯部的地址soft@cce.com.cn,Edit2中寫上主題,Edit3中填入SMTP.163.com,Edit4中填入使用者名稱dyhuyz,Edit5中填入我的地址dyhuyz@163.com,添加附件後,單擊發送按鈕,一切OK了!
注意事項
需要特別說明的是:目前部分網站的SMTP郵件伺服器要對發送郵件的使用者進行身分識別驗證,即要求給出使用者名稱和密碼資訊,否則無法發送,包括163.net,263.net,sina.com,sohu.com等均在此列。而Delphi 5的TNMSmtp構件本身未提供“密碼”屬性,採用以上簡單方法,不能利用這些伺服器發送郵件,否則會出現錯誤資訊;Delphi 6中用Indy構件組取代了Delphi 5中的FastNet構件組,其中的SMTP包含有身分識別驗證的相關資訊,可以很方便地解決這個問題。另一部分網站,如China.com,163.com等,則不要求身分識別驗證,利用本程式,盡可暢通無阻。