【 tulaoshi.com - Delphi 】
                             
                                 接发E-mail是许多“网虫”必修的功课,E-mail工具软件也很多,国外 
的有Microsoft的OutlookExpress、TheBat等,国内则有FoxMail这样的精品。 
其实,利用可视化编程工具Delphi4.0也能够制作出自己的E-mail软件。 
Delphi4.0有关E-mail的组件有两个:NmPOP3和NmSTMP,它们都位于Internet 
选项卡上,其中,NmPOP3组件封装并实现POP3协议,用来从InternetPOP3服务 
器上读取电子邮件;NmSTMP封装并实现STMP协议,可用来向Internet的STMP服 
务器发送电子邮件。限于篇幅,我们不能两者都介绍,这里只用NmSTMP编写一 
个发送E-mail的程序,至于NmPOP3,以后有机会再谈,或者在看完本文后你有 
兴趣,也可以借助于Delphi的帮助文档尝试用NmPOP3编程。 
我们先来看一下程序运行界面。图1是程序主窗体,上面有一个字符串网格 
(StringGrid)和三个按钮,它们的容器是仅有一个标签的PageControl。单击 
“Clear”钮清除网格内容,单击“Send”钮发送E-mail,单击“NewMail” 
钮弹出图2所示的对话框,此对话框用来设置STMP服务器名称、发件人地址、收 
件人地址、发件人名称和邮件主题,其中前三项必须填写,“SelectFile”按 
钮用来打开Open对话框,以便选取要发送的附件。 
NmSTMP的属性和方法不多,关键的属性是Host(STMP服务器名称)和PostMessage 
(包含邮件信息),正确设置了Host属性和PostMessage属性后,就可以用Connect 
方法(连接服务器)和SendMail方法发送E-mail了。 
编写代码之前先要改变StringGrid1的一些缺省属性:ColCount属性为6, 
FixedCols属性为0,RowCount属性为2,另外,将PageControl1的Align属性置 
为alClient。 
以下是Unit1(主窗体)代码清单: 
unitUnit1; 
interface 
uses 
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms, 
Dialogs,Grids,ComCtrls,StdCtrls,Psock,NMsmtp; 
type 
TForm1=class(TForm) 
PageControl1:TPageControl; 
TabSheet1:TTabSheet; 
StatusBar1:TStatusBar; 
StringGrid1:TStringGrid; 
Button1:TButton; 
Button2:TButton; 
Button3:TButton; 
NMSMTP1:TNMSMTP; 
procedureFormCreate(Sender:TObject); 
procedureButton1Click(Sender:TObject); 
procedureButton2Click(Sender:TObject); 
procedureButton3Click(Sender:TObject); 
procedureNMSMTP1Failure(Sender:TObject); 
procedureNMSMTP1SendStart(Sender:TObject); 
procedureNMSMTP1Success(Sender:TObject); 
private 
{Privatedeclarations} 
public 
{Publicdeclarations} 
end; 
var 
Form1:TForm1; 
implementation 
usesUnit2; 
{$R*.DFM} 
procedureTForm1.FormCreate(Sender:TObject); 
begin 
PageControl1.Pages[0].Caption:=‘SendMail’; 
self.Caption:=‘MyMailer’; 
self.BorderIcons:=[biSystemMenu,biMinimize]; 
self.BorderStyle:=bsSingle; 
Application.Icon:=self.Icon; 
Application.Title:=self.Caption; 
withStringGrid1do 
begin 
Cells[0,0]:=‘Host’; 
Cells[1,0]:=‘ToAddress’; 
Cells[2,0]:=‘FromAddress’; 
Cells[3,0]:=‘YourName’; 
Cells[4,0]:=‘Subject’; 
Cells[5,0]:=‘File’; 
end; 
Button2.Enabled:=False; 
Button3.Enabled:=False; 
end; 
procedureTForm1.Button1Click(Sender:TObject); 
begin 
Form2.Show; 
end; 
procedureTForm1.Button2Click(Sender:TObject); 
var 
i:Integer; 
begin 
fori:=1toStringGrid1.RowCount-2do 
withNmsmtp1do 
begin 
Host:=StringGrid1.Cells[0,i]; 
PostMessage.ToAddress.Add(StringGrid1.Cells[1,i]); 
PostMessage.FromAddress:=StringGrid1.Cells[2,i]; 
PostMessage.FromName:=StringGrid1.Cells[3,i]; 
PostMessage.Subject:=StringGrid1.Cells[4,i]; 
PostMessage.Attachments.Add(StringGrid1.Cells[5,i]); 
Connect; 
Sendmail; 
DisConnect; 
end; 
Button2.Enabled:=False; 
Button3.Click; 
end; 
procedureTForm1.Button3Click(Sender:TObject); 
var 
i:Integer; 
begin 
withStringGrid1do 
begin 
fori:=1toRowCount-2do 
begin 
Cells[0,i]:=‘’; 
Cells[1,i]:=‘’; 
Cells[2,i]:=‘’; 
Cells[3,i]:=‘’; 
Cells[4,i]:=‘’; 
Cells[5,i]:=‘’; 
end; 
RowCount:=2; 
end; 
Button2.Enabled:=False; 
Button3.Enabled:=False; 
end; 
procedureTForm1.NMSMTP1Failure(Sender:TObject); 
begin 
StatusBar1.SimpleText:=‘Mailsendfailure!’; 
end; 
procedureTForm1.NMSMTP1SendStart(Sender:TObject); 
begin 
StatusBar1