SendForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:5k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit SendForm;
  2. interface
  3. uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
  4.   StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls,
  5.   Psock, NMsmtp, IdComponent, IdTCPConnection, IdTCPClient,
  6.   IdMessageClient, IdSMTP, IdBaseComponent, IdMessage;
  7. type
  8.   TMainForm = class(TForm)
  9.     Panel2: TPanel;
  10.     reMessageText: TRichEdit;
  11.     Panel1: TPanel;
  12.     Label1: TLabel;
  13.     eName: TEdit;
  14.     Splitter1: TSplitter;
  15.     ListLog: TListBox;
  16.     Label2: TLabel;
  17.     eSubject: TEdit;
  18.     Label3: TLabel;
  19.     BbtnAddToList: TButton;
  20.     ListAddr: TListBox;
  21.     BtnRemove: TButton;
  22.     BtnFind: TButton;
  23.     Label5: TLabel;
  24.     eFrom: TEdit;
  25.     BtnSendAll: TButton;
  26.     eServer: TEdit;
  27.     MailMessage: TIdMessage;
  28.     Mail: TIdSMTP;
  29.     Label4: TLabel;
  30.     Label6: TLabel;
  31.     eUserName: TEdit;
  32.     Password: TLabel;
  33.     ePassword: TEdit;
  34.     procedure FormCreate(Sender: TObject);
  35.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  36.     procedure BtnSendAllClick(Sender: TObject);
  37.     procedure BbtnAddToListClick(Sender: TObject);
  38.     procedure BtnRemoveClick(Sender: TObject);
  39.     procedure BtnFindClick(Sender: TObject);
  40.     procedure MailConnected(Sender: TObject);
  41.     procedure MailDisconnected(Sender: TObject);
  42.     procedure MailStatus(axSender: TObject; const axStatus: TIdStatus;
  43.       const asStatusText: String);
  44.     procedure MailWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  45.       const AWorkCountMax: Integer);
  46.     procedure MailWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  47.   private
  48.     FileName: string;
  49.   end;
  50. var
  51.   MainForm: TMainForm;
  52. implementation
  53. {$R *.DFM}
  54. procedure TMainForm.FormCreate(Sender: TObject);
  55. begin
  56.   // load the list of addresses
  57.   FileName := ChangeFileExt (Application.ExeName, '.txt');
  58.   ListAddr.Items.LoadFromFile (FileName);
  59.   ListLog.Items.Add ('Addresses: ' + IntToStr (
  60.     ListAddr.Items.Count));
  61.   // select the first item
  62.   ListAddr.ItemIndex := 0;
  63. end;
  64. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  65. begin
  66.   // save the list of addresses
  67.   ListAddr.Items.SaveToFile (FileName);
  68. end;
  69. const
  70.   BccInMsg = 30;
  71. procedure TMainForm.BtnSendAllClick(Sender: TObject);
  72. var
  73.   nItem: Integer;
  74.   Res: Word;
  75. begin
  76.   Res := MessageDlg ('Start sending from item ' +
  77.       IntToStr (ListAddr.ItemIndex) + ' (' +
  78.       ListAddr.Items [ListAddr.ItemIndex] + ')?'#13 +
  79.       '(No starts form 0)',
  80.       mtConfirmation,
  81.       [mbYes, mbNo, mbCancel], 0);
  82.   if Res = mrCancel then
  83.     Exit;
  84.   if Res = mrYes then
  85.     nItem := ListAddr.ItemIndex
  86.   else
  87.     nItem := 0;
  88.   // connect
  89.   Mail.Host := eServer.Text;
  90.   Mail.UserID := eUserName.Text;
  91.   if ePassword.Text <> '' then
  92.   begin
  93.     Mail.Password := ePassword.Text;
  94.     Mail.AuthenticationType := atLogin;
  95.   end;
  96.   Mail.Connect;
  97.   // send the messages, one by one, prepending a custom message
  98.   try
  99.     // set the fixed part of the header
  100.     MailMessage.From.Name := eFrom.Text;
  101.     MailMessage.Subject := eSubject.Text;
  102.     MailMessage.Body.SetText (
  103.       reMessageText.Lines.GetText);
  104.     MailMessage.Body.Insert (0, 'Hello');
  105.     while nItem < ListAddr.Items.Count do
  106.     begin
  107.       // show the current selection
  108.       Application.ProcessMessages;
  109.       ListAddr.ItemIndex := nItem;
  110.       MailMessage.Body [0] := 'Hello ' + ListAddr.Items [nItem];
  111.       MailMessage.Recipients.EMailAddresses := ListAddr.Items [nItem];
  112.       Mail.Send(MailMessage);
  113.       Inc (nItem);
  114.     end;
  115.   finally // we're done
  116.     Mail.Disconnect;
  117.   end;
  118. end;
  119. procedure TMainForm.BbtnAddToListClick(Sender: TObject);
  120. begin
  121.   ListAddr.ItemIndex :=
  122.     ListAddr.Items.Add (eName.Text);
  123. end;
  124. procedure TMainForm.BtnRemoveClick(Sender: TObject);
  125. begin
  126.   // copy the item to the name edit box and remove it
  127.   eName.Text := ListAddr.Items [ListAddr.ItemIndex];
  128.   ListAddr.Items.Delete (ListAddr.ItemIndex);
  129. end;
  130. procedure TMainForm.BtnFindClick(Sender: TObject);
  131. var
  132.   I: Integer;
  133. begin
  134.   for I := 0 to ListAddr.Items.Count - 1 do
  135.     if Pos (eName.Text, ListAddr.Items [I]) > 0 then
  136.     begin
  137.       ListAddr.ItemIndex := I;
  138.       Break;
  139.     end;
  140.   Beep;
  141. end;
  142. procedure TMainForm.MailConnected(Sender: TObject);
  143. begin
  144.   ListLog.Items.Add ('Connected to host');
  145. end;
  146. procedure TMainForm.MailDisconnected(Sender: TObject);
  147. begin
  148.   ListLog.Items.Add ('Disconnected from host');
  149. end;
  150. procedure TMainForm.MailStatus(axSender: TObject;
  151.   const axStatus: TIdStatus; const asStatusText: String);
  152. begin
  153.   ListLog.Items.Add (asStatusText);
  154. end;
  155. procedure TMainForm.MailWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  156.   const AWorkCountMax: Integer);
  157. begin
  158.   ListLog.Items.Add ('Sending to: ' +
  159.     MailMessage.Recipients.EMailAddresses);
  160. end;
  161. procedure TMainForm.MailWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  162. begin
  163.   ListLog.Items.Add ('Done');
  164. end;
  165. end.