delphi 编程技巧

源代码在线查看: 利用delphi编程发送e-mail (2001年5月17日).txt

软件大小: 774 K
上传用户: zyhunicom
关键词: delphi 编程技巧
下载地址: 免注册下载 普通下载 VIP

相关代码

				利用Delphi编程发送E-mail (2001年5月17日) 
				
				本站更新  分类:Internet   作者:上海 钱可栋  推荐:   阅读次数:258  
				(http://www.codesky.net)  
				
				--------------------------------------------------------------------------------
				  接发E-mail是许多“网虫”必修的功课,E-mail工具软件也很多,国外有Microsoft的Outlook Express、The Bat等,国内则有FoxMail这样的精品。实,利用可视化编程工具Delphi4.0也能够制作出自己的E-mail软件。
				  Delphi4.0有关E-mail的组件有两个:NmPOP3和NmSTMP,它们都位于Internet 选项卡上,其中,NmPOP3组件封装并实现POP3协议,用来从Internet POP3服务器上读取电子邮件;NmSTMP封装并实现STMP协议,可用来向Internet的STMP服务器发送电子邮件。限于篇幅,我们不能两者都介绍,这里只用NmSTMP编写一个发送E-mail的程序,至于NmPOP3,以后有机会再谈,或者在看完本文后你有兴趣,也可以借助于Delphi的帮助文档尝试用NmPOP3编程。
				  我们先来看一下程序运行界面。图1是程序主窗体,上面有一个字符串网格(StringGrid)和三个按钮,它们的容器是仅有一个标签的PageControl。单击“Clear”钮清除网格内容,单击“Send”钮发送E-mail,单击“New Mail”
				钮弹出图2所示的对话框,此对话框用来设置STMP服务器名称、发件人地址、收件人地址、发件人名称和邮件主题,其中前三项必须填写,“Select File”按钮用来打开Open对话框,以便选取要发送的附件。
				  NmSTMP的属性和方法不多,关键的属性是Host(STMP服务器名称)和PostMessage (包含邮件信息),正确设置了Host属性和PostMessage属性后,就可以用Connect 方法(连接服务器)和SendMail方法发送E-mail了。
				  编写代码之前先要改变StringGrid1的一些缺省属性:ColCount属性为6, FixedCols属性为0,RowCount属性为2,另外,将PageControl1的Align属性置为alClient。
				  以下是Unit1(主窗体)代码清单:
				  unit Unit1;
				  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;
				   procedure FormCreate(Sender: TObject);
				   procedure Button1Click(Sender: TObject);
				   procedure Button2Click(Sender: TObject);
				   procedure Button3Click(Sender: TObject);
				   procedure NMSMTP1Failure(Sender: TObject);
				   procedure NMSMTP1SendStart(Sender: TObject);
				   procedure NMSMTP1Success(Sender: TObject);
				   private
				   { Private declarations }
				   public
				   { Public declarations }
				   end;
				  var
				   Form1: TForm1;
				  implementation
				  uses Unit2;
				  {$R *.DFM}
				  procedure TForm1.FormCreate(Sender: TObject);
				  begin
				   PageControl1.Pages[0].Caption:=‘Send Mail’;
				   self.Caption:=‘My Mailer’;
				   self.BorderIcons:=[biSystemMenu,biMinimize];
				   self.BorderStyle:=bsSingle;
				   Application.Icon:=self.Icon; 
				   Application.Title:=self.Caption; 
				   with StringGrid1 do
				   begin
				   Cells[0,0]:=‘Host’;
				   Cells[1,0]:=‘To Address’;
				   Cells[2,0]:=‘From Address’;
				   Cells[3,0]:=‘Your Name’;
				   Cells[4,0]:=‘Subject’;
				   Cells[5,0]:=‘File’;
				   end;
				   Button2.Enabled:=False;
				   Button3.Enabled:=False;
				  end;
				  procedure TForm1.Button1Click(Sender: TObject);
				  begin
				   Form2.Show;
				  end;
				  procedure TForm1.Button2Click(Sender: TObject);
				  var
				  i:Integer;
				  begin
				   for i:=1 to StringGrid1.RowCount-2 do
				   with Nmsmtp1 do
				   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;
				  procedure TForm1.Button3Click(Sender: TObject);
				  var
				  i:Integer;
				  begin
				   with StringGrid1 do
				   begin
				   for i:=1 to RowCount-2 do
				   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;
				  procedure TForm1.NMSMTP1Failure(Sender: TObject);
				  begin
				   StatusBar1.SimpleText:=‘Mail send failure!’;
				  end;
				  procedure TForm1.NMSMTP1SendStart(Sender: TObject);
				  begin
				   StatusBar1.SimpleText:=‘Now Sending...’;
				  end;
				  procedure TForm1.NMSMTP1Success(Sender: TObject);
				  begin
				   StatusBar1.SimpleText:=‘Send Success!’;
				  end;
				  end.
				  Button1是“New Mail”按钮,Button 2是“Send”按钮,Button3是“Clear” 按钮。
				  以下是Unit2代码清单:
				  unit Unit2;
				  interface
				  uses
				   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
				Dialogs, StdCtrls;
				  type
				   TForm2 = class(TForm)
				   OpenDialog1: TOpenDialog;
				   GroupBox1: TGroupBox;
				   GroupBox2: TGroupBox;
				   Edit1: TEdit;
				   Edit2: TEdit;
				   Edit3: TEdit;
				   Edit4: TEdit;
				   Edit5: TEdit;
				   Button1: TButton;
				   Button2: TButton;
				   Button3: TButton;
				   Label1: TLabel;
				   Label2: TLabel;
				   Label3: TLabel;
				   Label4: TLabel;
				   Label5: TLabel;
				   Label6: TLabel;
				   procedure Button1Click(Sender: TObject);
				   procedure Button2Click(Sender: TObject);
				   procedure Button3Click(Sender: TObject);
				   procedure FormActivate(Sender: TObject);
				   procedure FormCreate(Sender: TObject);
				   private
				   { Private declarations }
				   public
				   { Public declarations }
				   end;
				  var
				   Form2: TForm2;
				  implementation
				  uses Unit1;
				  {$R *.DFM}
				  procedure TForm2.FormCreate(Sender: TObject);
				  begin
				   self.Caption:=‘New Mail’; 
				   self.BorderStyle:=bsDialog;
				  end;
				  procedure TForm2.FormActivate(Sender: TObject);
				  begin
				   Edit1.Text:=‘’;
				   Edit2.Text:=‘’;
				   Edit3.Text:=‘’;
				   Edit4.Text:=‘’;
				   Edit5.Text:=‘’;
				   Label1.Caption:=‘No File’;
				  end;
				  procedure TForm2.Button1Click(Sender: TObject);
				  begin
				   if OpenDialog1.Execute then
				   Label1.Caption:=Opendialog1.Filename;
				  end;
				  procedure TForm2.Button2Click(Sender: TObject);
				  var
				  i:Integer;
				  begin
				   if (Edit1.Text‘’) and (Edit2.Text‘’) and (Edit5.Text‘’) 
				and (Label1.Caption‘No File’) then
				   begin
				   with Form1.StringGrid1 do
				   begin
				   RowCount:=RowCount+1;
				   i:=RowCount-2;
				   Cells[0,i]:=Edit1.Text;
				   Cells[1,i]:=Edit2.Text;
				   Cells[2,i]:=Edit5.Text;
				   Cells[3,i]:=Edit3.Text;
				   Cells[4,i]:=Edit4.Text;
				   Cells[5,i]:=Label1.Caption;
				   end;
				   Form1.Button2.Enabled:=True;
				   Form1.Button3.Enabled:=True;
				   end;
				   self.Hide;
				  end;
				  procedure TForm2.Button3Click(Sender: TObject);
				  begin
				   self.Hide; 
				  end;
				  end.
				  Edit1、Edit2、Edit3、Edit4、Edit5编辑框分别用于填写服务器名称、收件人地址、发件人名称、邮件主题和发件人地址。
				  现在一个E-mail发送程序就完成了。你可以试一试,自已给自已发几封邮件,用FoxMail之类的软件是否能收到信。 
				
				 
				 
							

相关资源