用 Delphi 做个发信机

    技术2022-05-11  122

         hai,大家好,我是梦寻,说来这应算是我的第二次发帖了,这回小梦给大家带来的是一个发信机,不知大家喜不喜欢。如果不满意的话,不要紧,您就狠狠的训梦寻一顿。Ok,如果您认为还可以的话请别忘了投梦寻一票哦,小梦先在这说声谢谢了。^_^

        ok,还是那句老话,转入正题,现在我们就来做一个发信机。

    首先我们应在工程中加入以下元件。

    组件名 caption           关联的组件Label1 邮件服务器地址:    Edit1Label2 帐号名:           Edit2Label3 端口号:           Edit3Label4 收信群体服务器地址:Edit4Label5 收信者名称:       ComboBox1Label6 信件主题信息:     Edit5Label7 所要发送信件:     Edit6Label8 信件附件路径:     ListBox1Label9 发信显示的信息名:  Edit8Label10 发信人 Email 地址:Edit9CheckBox1 穷举式发信 Button1 开始发信 Button2 读入字典文件 Button3 ...               Edit6Button4 增加/             ListBoxButton5 清除              ListBoxPanel1  Panel2  StatusBar1  OpenDialog1  NMSMTP1  ListBox1  

    好的,当我们加完了以上所有的组件后,并编好位置后,接下来我们就可以把以下代码以覆盖的形式拷入Delphi 的代码编辑栏中。

    unit Unit1;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, Psock, NMsmtp, ExtCtrls, ComCtrls;

    type  TForm1 = class(TForm)    NMSMTP1: TNMSMTP;    Panel1: TPanel;    Label9: TLabel;    Edit8: TEdit;    Edit9: TEdit;    Label10: TLabel;    Label6: TLabel;    Label7: TLabel;    Label8: TLabel;    Edit6: TEdit;    Edit5: TEdit;    Button3: TButton;    Button4: TButton;    Panel2: TPanel;    Label1: TLabel;    Label4: TLabel;    Edit4: TEdit;    ComboBox1: TComboBox;    Button1: TButton;    Button2: TButton;    CheckBox1: TCheckBox;    Label5: TLabel;    Edit2: TEdit;    Label2: TLabel;    Label3: TLabel;    Edit3: TEdit;    StatusBar1: TStatusBar;    OpenDialog1: TOpenDialog;    ListBox1: TListBox;    Edit1: TEdit;    Button5: TButton;    procedure Button3Click(Sender: TObject);    procedure Button4Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure NMSMTP1Success(Sender: TObject);    procedure NMSMTP1Failure(Sender: TObject);    procedure SendNextmail(var datteinc:integer);    procedure Button1Click(Sender: TObject);    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);    procedure NMSMTP1ConnectionFailed(Sender: TObject);    procedure NMSMTP1ConnectionRequired(var Handled: Boolean);    procedure NMSMTP1InvalidHost(var Handled: Boolean);    procedure FormCreate(Sender: TObject);    procedure Edit1Change(Sender: TObject);    procedure Edit2Change(Sender: TObject);    procedure Button5Click(Sender: TObject);    procedure Edit8KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit9KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit6KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit5KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit1KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit2KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Edit4KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure helpshow;    procedure FormKeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);  private    { Private declarations }  public    { Public declarations }  end;

    var  Form1: TForm1;  sendsuc,sendfal,cursennum,totaco:integer;  connal,startsen:boolean;implementation

    {$R *.DFM}procedure TForm1.helpshow;beginshowmessage(#13+'┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓'+#13+'┃  在使用本发信机发信时,应先作完以下几项:                     ┃'+#13+'┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫'+#13+'┃    1 在收信地址栏中输入收信群体的地址                        ┃'+#13+'┃      例:收信体为 xxx@yyy.nnn 则应在其中填入:yyy.nnn          ┃'+#13+'┃                                                              ┃'+#13+'┃    2 由于本发信机仅是个范例故而不具备有穷举发信功能,因此您应┃'+#13+'┃      在收信栏中手动输入收信者名或读入一字典文件,格式举例如下┃'+#13+'┃      例,发给 xx1、xx2   则每输完一个,按回车键一次)          ┃'+#13+'┃                                                              ┃'+#13+'┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫'+#13+'┃    本发信机仅做为一个范例,如果您用它来做一些不合法的事情,  ┃'+#13+'┃ 一切后果自行负责.                                            ┃'+#13+'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛'+#13+'      Copy(R)ight by hhq,2001.02.07     HomePage:www.suye.8u8.com');end;

    procedure TForm1.SendNextmail(var datteinc:integer);beginif ComboBox1.Items.Count>cursennum then   begin   inc(datteinc);   statusbar1.Panels[0].Text:='总发送了('+inttostr(sendsuc+sendfal)+')次';   statusbar1.Panels[1].Text:='成功发送('+inttostr(sendsuc)+')封';   statusbar1.Panels[2].text:='当前正发送:'+combobox1.Items.Strings[cursennum]+'@'+edit4.Text;   ComboBox1.text:=ComboBox1.items.strings[cursennum];   inc(cursennum);   NMSMTP1.PostMessage.Attachments.AddStrings(listbox1.Items);   NMSMTP1.PostMessage.ToAddress.Add(combobox1.Items.Strings[cursennum]+'@'+edit4.Text);   NMSMTP1.SendMail;   end else   begin   startsen:=false;   button1.Caption:='开始发信';   showmessage('请读入新发信进程以便进行信件发送。'+#13+'       (按 F1 键可获得帮助信息)');   edit1.Enabled:=true;   edit2.Enabled:=true;   edit3.Enabled:=true;   edit4.Enabled:=true;   combobox1.Enabled:=true;   button2.Enabled:=true;   button1.Enabled:=false;   edit4.SetFocus;   end;end;procedure TForm1.Button3Click(Sender: TObject);beginif opendialog1.Execute then    begin    edit6.text:=opendialog1.FileName;    NMSMTP1.PostMessage.Body.LoadFromFile(edit6.text);    end;end;

    procedure TForm1.Button4Click(Sender: TObject);beginif opendialog1.Execute then  begin  ListBox1.Items.Add(opendialog1.filename);  end;end;

    procedure TForm1.Button2Click(Sender: TObject);beginif opendialog1.Execute thenbeginbutton1.Caption:='开始发信';button1.Enabled:=true;startsen:=false;sendsuc:=0;sendfal:=0;cursennum:=0;ComboBox1.Items.LoadFromFile(opendialog1.FileName);ComboBox1.text:=ComboBox1.items.strings[0];totaco:=combobox1.Items.Count;statusbar1.Panels[3].text:='总共('+inttostr(totaco)+')封';end  else   begin   showmessage('由于您未选择字典文件,因此请您在收信栏中手工填加。');   combobox1.SetFocus;   end;end;

    procedure TForm1.NMSMTP1Success(Sender: TObject);beginif  startsen then SendNextmail(sendsuc);end;

    procedure TForm1.NMSMTP1Failure(Sender: TObject);beginif  startsen then SendNextmail(sendfal);end;

    procedure TForm1.Button1Click(Sender: TObject);beginif edit4.text='' then  begin  showmessage('请在收信服务器栏中填入收信群体的服务器'+#13+              '  例如:要寄到 xxx@yyy.nnn 则填入 yyy.nnn');  edit4.SetFocus;  end   else    if combobox1.text='' then    begin    showmessage('请读入地址字典文件。');    button2.SetFocus;    button2.Click;    endelsebeginif startsen then   begin     startsen:=false;     button1.Caption:='继续发信';     edit1.Enabled:=true;     edit2.Enabled:=true;     edit3.Enabled:=true;     edit4.Enabled:=true;     combobox1.Enabled:=true;     button2.Enabled:=true;     end    else      begin      edit1.Enabled:=false;      edit2.Enabled:=false;      edit3.Enabled:=false;      edit4.Enabled:=false;      combobox1.Enabled:=false;      button2.Enabled:=false;      startsen:=true;      NMSMTP1.Host := Edit1.Text;      NMSMTP1.Port := StrToInt(Edit3.Text);      NMSMTP1.UserID := Edit2.Text;     button1.Caption:='暂停发信';{if not connal then  begin  NMSMTP1.Connect;  connal:=true;  showmessage('yes');  end;}  NMSMTP1.PostMessage.FromAddress := Edit9.Text;  NMSMTP1.PostMessage.FromName := Edit8.Text;  NMSMTP1.PostMessage.Subject := Edit5.Text;  SendNextmail(sendsuc);end;end;end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin  NMSMTP1.Abort;end;

    procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);begin ShowMessage('连接失败');   connal:=false;;end;

    procedure TForm1.NMSMTP1ConnectionRequired(var Handled: Boolean);begin  If MessageDlg('您还未连线是否进行连接', mtConfirmation, mbOkCancel, 0) = mrOk then  Begin    Handled := TRUE;    NMSMTP1.Connect;  End;

    end;

    procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);vartmpstr:string;begin  If InputQuery('输入邮件服务器地址!', '请输入邮件服务器地址:',tmpstr) then  Begin    NMSMTP1.Host := tmpstr;    edit1.text:=tmpstr;    Handled := TRUE;  End;

    end;

    procedure TForm1.FormCreate(Sender: TObject);begin connal:=false; startsen:=false;end;

    procedure TForm1.Edit1Change(Sender: TObject);vartmpstr:string;begin    tmpstr:=edit1.text;    NMSMTP1.Host := tmpstr; end;procedure TForm1.Edit2Change(Sender: TObject);begin  NMSMTP1.UserID := Edit2.Text;end;

    procedure TForm1.Button5Click(Sender: TObject);beginListBox1.Clear;end;

    procedure TForm1.Edit8KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then edit9.SetFocus;end;

    procedure TForm1.Edit9KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then edit5.SetFocus;end;

    procedure TForm1.Edit6KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then edit1.SetFocus;end;

    procedure TForm1.Edit5KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then button3.SetFocus;end;

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then edit2.SetFocus;

    end;

    procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_return then edit4.SetFocus;end;

    procedure TForm1.Edit4KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif (key=vk_return)then if (combobox1.Items.Count=0) then button2.SetFocus else button1.setfocus;end;

    procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif (key=vk_return) and (comboBox1.Text<>'') thenbeginComboBox1.Items.Add(ComboBox1.text);ComboBox1.text:='';totaco:=combobox1.Items.Count;statusbar1.Panels[3].text:='总共('+inttostr(totaco)+')封';end;end;

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginif key=vk_f1 then form1.helpshow;end;

    end.

    好了,完成以上几步后,接下来我们只要为各个组件联系到各自所对应的事件,那吗我们用 Delphi 所做的发信机也就几呼完成了。当然您也可以对它进行修改,以让它更符合您的口味。虽然步骤多了点,不过至少我们做出了自己的一个发信机。

    最后偷偷的告诉您一下,您想偷懒吗,如果是,那吗,嘿嘿,那就..

    快找小梦要完整的程序代码,可要快哦,不然小梦过几天就跑掉了哦。小梦的伊妹儿是:su_ye@163.net,主页 www.suye.8u8.com


    最新回复(0)