⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 利用delphi编程发送e-mail (2000年8月28日).txt

📁 自己对DELPHI学习的一点体会
💻 TXT
字号:
利用Delphi编程发送E-mail (2000年8月28日) 

本站更新  分类:   作者:钱可栋   推荐:   阅读次数:864  
(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之类的软件是否能收到信。顺便说一句,本文就是用这个自编程序发到 
编辑部的。 

作者:钱可栋 

 
 


--------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -