![]() |
New book: Delphi 2007 Handbook My blog in online Delphi tech support service: support.marcocantu.com |
Menu for Development
|
|
| |||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
| Chapter 21 - Project SendList |
Project Structure |
| SendList.dpr |
program SendList; uses Forms, SendForm in 'SendForm.pas' {MainForm}; {$R *.RES} begin Application.Title := 'SimpleMail'; Application.CreateForm(TMainForm, MainForm); Application.Run; end. |
| SendForm.pas |
unit SendForm; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, Psock, NMsmtp, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, IdBaseComponent, IdMessage; type TMainForm = class(TForm) Panel2: TPanel; reMessageText: TRichEdit; Panel1: TPanel; Label1: TLabel; eName: TEdit; Splitter1: TSplitter; ListLog: TListBox; Label2: TLabel; eSubject: TEdit; Label3: TLabel; BbtnAddToList: TButton; ListAddr: TListBox; BtnRemove: TButton; BtnFind: TButton; Label5: TLabel; eFrom: TEdit; BtnSendAll: TButton; eServer: TEdit; MailMessage: TIdMessage; Mail: TIdSMTP; Label4: TLabel; Label6: TLabel; eUserName: TEdit; Password: TLabel; ePassword: TEdit; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BtnSendAllClick(Sender: TObject); procedure BbtnAddToListClick(Sender: TObject); procedure BtnRemoveClick(Sender: TObject); procedure BtnFindClick(Sender: TObject); procedure MailConnected(Sender: TObject); procedure MailDisconnected(Sender: TObject); procedure MailStatus(axSender: TObject; const axStatus: TIdStatus; const asStatusText: String); procedure MailWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); procedure MailWorkEnd(Sender: TObject; AWorkMode: TWorkMode); private FileName: string; end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.FormCreate(Sender: TObject); begin // load the list of addresses FileName := ChangeFileExt (Application.ExeName, '.txt'); ListAddr.Items.LoadFromFile (FileName); ListLog.Items.Add ('Addresses: ' + IntToStr ( ListAddr.Items.Count)); // select the first item ListAddr.ItemIndex := 0; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin // save the list of addresses ListAddr.Items.SaveToFile (FileName); end; const BccInMsg = 30; procedure TMainForm.BtnSendAllClick(Sender: TObject); var nItem: Integer; Res: Word; begin Res := MessageDlg ('Start sending from item ' + IntToStr (ListAddr.ItemIndex) + ' (' + ListAddr.Items [ListAddr.ItemIndex] + ')?'#13 + '(No starts form 0)', mtConfirmation, [mbYes, mbNo, mbCancel], 0); if Res = mrCancel then Exit; if Res = mrYes then nItem := ListAddr.ItemIndex else nItem := 0; // connect Mail.Host := eServer.Text; Mail.UserID := eUserName.Text; if ePassword.Text <> '' then begin Mail.Password := ePassword.Text; Mail.AuthenticationType := atLogin; end; Mail.Connect; // send the messages, one by one, prepending a custom message try // set the fixed part of the header MailMessage.From.Name := eFrom.Text; MailMessage.Subject := eSubject.Text; MailMessage.Body.SetText ( reMessageText.Lines.GetText); MailMessage.Body.Insert (0, 'Hello'); while nItem < ListAddr.Items.Count do begin // show the current selection Application.ProcessMessages; ListAddr.ItemIndex := nItem; MailMessage.Body [0] := 'Hello ' + ListAddr.Items [nItem]; MailMessage.Recipients.EMailAddresses := ListAddr.Items [nItem]; Mail.Send(MailMessage); Inc (nItem); end; finally // we're done Mail.Disconnect; end; end; procedure TMainForm.BbtnAddToListClick(Sender: TObject); begin ListAddr.ItemIndex := ListAddr.Items.Add (eName.Text); end; procedure TMainForm.BtnRemoveClick(Sender: TObject); begin // copy the item to the name edit box and remove it eName.Text := ListAddr.Items [ListAddr.ItemIndex]; ListAddr.Items.Delete (ListAddr.ItemIndex); end; procedure TMainForm.BtnFindClick(Sender: TObject); var I: Integer; begin for I := 0 to ListAddr.Items.Count - 1 do if Pos (eName.Text, ListAddr.Items [I]) > 0 then begin ListAddr.ItemIndex := I; Break; end; Beep; end; procedure TMainForm.MailConnected(Sender: TObject); begin ListLog.Items.Add ('Connected to host'); end; procedure TMainForm.MailDisconnected(Sender: TObject); begin ListLog.Items.Add ('Disconnected from host'); end; procedure TMainForm.MailStatus(axSender: TObject; const axStatus: TIdStatus; const asStatusText: String); begin ListLog.Items.Add (asStatusText); end; procedure TMainForm.MailWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin ListLog.Items.Add ('Sending to: ' + MailMessage.Recipients.EMailAddresses); end; procedure TMainForm.MailWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin ListLog.Items.Add ('Done'); end; end. |
| SendForm.dfm |
object MainForm: TMainForm Left = 193 Top = 109 AutoScroll = False Caption = 'Send List' ClientHeight = 501 ClientWidth = 622 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = True Position = poDefaultPosOnly OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Splitter1: TSplitter Left = 321 Top = 276 Width = 3 Height = 225 Cursor = crHSplit end object Panel1: TPanel Left = 0 Top = 65 Width = 622 Height = 211 Align = alTop BevelOuter = bvLowered TabOrder = 2 object Label1: TLabel Left = 12 Top = 11 Width = 31 Height = 13 Hint = 'Recipient''s name(s), comma delimited' Caption = 'Name:' ParentShowHint = False ShowHint = True end object Label3: TLabel Left = 12 Top = 34 Width = 19 Height = 13 Caption = 'List:' end object eName: TEdit Left = 48 Top = 7 Width = 441 Height = 21 ParentShowHint = False ShowHint = False TabOrder = 0 end object BbtnAddToList: TButton Left = 504 Top = 32 Width = 75 Height = 25 Caption = 'Add To &List' TabOrder = 1 OnClick = BbtnAddToListClick end object ListAddr: TListBox Left = 48 Top = 32 Width = 441 Height = 169 ItemHeight = 13 Sorted = True TabOrder = 2 end object BtnRemove: TButton Left = 504 Top = 72 Width = 75 Height = 25 Caption = '&Remove' TabOrder = 3 OnClick = BtnRemoveClick end object BtnFind: TButton Left = 504 Top = 112 Width = 75 Height = 25 Caption = '&Find' TabOrder = 4 OnClick = BtnFindClick end object BtnSendAll: TButton Left = 504 Top = 152 Width = 75 Height = 25 Caption = 'Send to &All' TabOrder = 5 OnClick = BtnSendAllClick end end object reMessageText: TRichEdit Left = 0 Top = 276 Width = 321 Height = 225 Align = alLeft Lines.Strings = ( 'This is a test message.' '' 'Message sent by the Send List program ' 'of the book Mastering Delphi.') TabOrder = 1 end object Panel2: TPanel Left = 0 Top = 0 Width = 622 Height = 65 Align = alTop BevelOuter = bvNone TabOrder = 0 object Label2: TLabel Left = 11 Top = 8 Width = 39 Height = 13 Hint = 'Subject of this message' Caption = 'Subject:' ParentShowHint = False ShowHint = True end object Label5: TLabel Left = 16 Top = 40 Width = 26 Height = 13 Caption = 'From:' end object Label4: TLabel Left = 264 Top = 8 Width = 25 Height = 13 Caption = 'Host:' end object Label6: TLabel Left = 240 Top = 37 Width = 53 Height = 13 Caption = 'UserName:' end object Password: TLabel Left = 426 Top = 37 Width = 49 Height = 13 Caption = 'Password:' end object eSubject: TEdit Left = 56 Top = 4 Width = 153 Height = 21 TabOrder = 0 end object eFrom: TEdit Left = 56 Top = 35 Width = 153 Height = 21 TabOrder = 1 end object eServer: TEdit Left = 295 Top = 4 Width = 121 Height = 21 TabOrder = 2 end object eUserName: TEdit Left = 296 Top = 32 Width = 121 Height = 21 TabOrder = 3 end object ePassword: TEdit Left = 480 Top = 32 Width = 121 Height = 21 PasswordChar = '*' TabOrder = 4 end end object ListLog: TListBox Left = 324 Top = 276 Width = 298 Height = 225 Align = alClient ItemHeight = 13 TabOrder = 3 end object MailMessage: TIdMessage BccList = <> CCList = <> Recipients = <> ReplyTo = <> Left = 144 Top = 80 end object Mail: TIdSMTP OnStatus = MailStatus OnDisconnected = MailDisconnected OnWorkBegin = MailWorkBegin OnWorkEnd = MailWorkEnd OnConnected = MailConnected Left = 144 Top = 120 end end |