我要投稿
  • 您当前的位置:365bet官方 -> 技术教程 -> 软件开发教程 -> Delphi教程 -> 教程内容
  • [ 收藏本页教程 ]
  • 利用Delphi编程发送E-mailDelphi教程

    教程作者:佚名    教程来源:不详   教程栏目: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.SimpleText:=‘NowSending...’;
    end;
    procedureTForm1.NMSMTP1Success(Sender:TObject);
    begin
    StatusBar1.SimpleText:=‘SendSuccess!’;
    end;
    end.
    Button1是“NewMail”按钮,Button2是“Send”按钮,Button3是“Clear”按钮。
    以下是Unit2代码清单:
    unitUnit2;
    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;
    procedureButton1Click(Sender:TObject);
    procedureButton2Click(Sender:TObject);
    procedureButton3Click(Sender:TObject);
    procedureFormActivate(Sender:TObject);
    procedureFormCreate(Sender:TObject);
    private
    {Privatedeclarations}
    public
    {Publicdeclarations}
    end;
    var
    Form2:TForm2;
    implementation
    usesUnit1;
    {$R*.DFM}
    procedureTForm2.FormCreate(Sender:TObject);
    begin
    self.Caption:=‘NewMail’;
    self.BorderStyle:=bsDialog;
    end;
    procedureTForm2.FormActivate(Sender:TObject);
    begin
    Edit1.Text:=‘’;
    Edit2.Text:=‘’;
    Edit3.Text:=‘’;
    Edit4.Text:=‘’;
    Edit5.Text:=‘’;
    Label1.Caption:=‘NoFile’;
    end;
    procedureTForm2.Button1Click(Sender:TObject);
    begin
    ifOpenDialog1.Executethen
    Label1.Caption:=Opendialog1.Filename;
    end;
    procedureTForm2.Button2Click(Sender:TObject);
    var
    i:Integer;
    begin
    if(Edit1.Text<>‘’)and(Edit2.Text<>‘’)and(Edit5.Text<>‘’)
    and(Label1.Caption<>‘NoFile’)then
    begin
    withForm1.StringGrid1do
    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;
    procedureTForm2.Button3Click(Sender:TObject);
    begin
    self.Hide;
    end;
    end.
    Edit1、Edit2、Edit3、Edit4、Edit5编辑框分别用于填写服务器名称、收件
    人地址、发件人名称、邮件主题和发件人地址。
    现在一个E-mail发送程序就完成了。你可以试一试,自已给自已发几封邮件,
    用FoxMail之类的软件是否能收到信。顺便说一句,本文就是用这个自编程序发到
    编辑部的。  
    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.www.ct131.com All Rights Reserved.365bet官方 版权所有