📄 mailsnd1.pas
字号:
while (i <= Length(Str)) and (Str[i] = ' ') do
i := i + 1;
Result := Copy(Str, i, Length(Str) - i + 1);
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function Trim(Str : String) : String;
begin
Result := TrimLeft(TrimRight(Str));
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.BuildRcptList;
var
Buf : String;
I : Integer;
begin
SmtpClient.RcptName.Clear;
// Recipient list is the sum of To, Cc and Bcc fields
Buf := '';
if Length(Trim(ToEdit.Text)) > 0 then
Buf := Trim(ToEdit.Text);
if Length(Trim(CcEdit.Text)) > 0 then
Buf := Buf + ';' + Trim(CcEdit.Text);
if Length(Trim(BccEdit.Text)) > 0 then
Buf := Buf + ';' + Trim(BccEdit.Text);
if (Length(Buf) > 0) and (Buf[1] = ';') then
Buf := Trim(Copy(Buf, 2, Length(Buf)));
while TRUE do begin
I := Pos(';', Buf);
if I <= 0 then begin
SmtpClient.RcptName.Add(Trim(Buf));
break;
end
else begin
SmtpClient.RcptName.Add(Trim(Copy(Buf, 1, I - 1)));
Delete(Buf, 1, I);
end;
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.SmtpClientDisplay(Sender: TObject; Msg: String);
begin
Display(Msg);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.SmtpClientGetData(
Sender : TObject;
LineNum : Integer;
MsgLine : Pointer;
MaxLen : Integer;
var More: Boolean);
var
Len : Integer;
begin
if LineNum > MsgMemo.Lines.count then
More := FALSE
else begin
Len := Length(MsgMemo.Lines[LineNum - 1]);
{ Truncate the line if too long (should wrap to next line) }
if Len >= MaxLen then
StrPCopy(MsgLine, Copy(MsgMemo.Lines[LineNum - 1], 1, MaxLen - 1))
else
StrPCopy(MsgLine, MsgMemo.Lines[LineNum - 1]);
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.SmtpClientHeaderLine(
Sender : TObject;
Msg : Pointer;
Size : Integer);
begin
{ This demonstrate how to add a line to the message header }
{ Just detect one of the header lines and add text at the end of this }
{ line. Use #13#10 to form a new line }
{ Here we check for the From: header line and add a Comments: line }
if StrLIComp(Msg, 'From:', 5) = 0 then
StrCat(Msg, #13#10 + 'Comments: This is a test');
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.ClearDisplayButtonClick(Sender: TObject);
begin
DisplayMemo.Clear;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.ExceptionHandler(Sender: TObject; E: Exception);
begin
Application.ShowException(E);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Connect to the mail server }
procedure TSmtpTestForm.ConnectButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.Host := HostEdit.Text;
SmtpClient.Port := PortEdit.Text;
SmtpClient.Connect;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Send HELO command with our local identification }
procedure TSmtpTestForm.HeloButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.SignOn := SignOnEdit.Text;
SmtpClient.Helo;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.EhloButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.SignOn := SignOnEdit.Text;
SmtpClient.EHlo;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.AuthButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.Username := UsernameEdit.Text;
SmtpClient.Password := PasswordEdit.Text;
SmtpClient.AuthType := TSmtpAuthType(AuthComboBox.ItemIndex);
SmtpClient.Auth;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Open is Connect and Helo methods combined }
procedure TSmtpTestForm.OpenButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.Host := HostEdit.Text;
SmtpClient.Port := PortEdit.Text;
SmtpClient.SignOn := SignOnEdit.Text;
SmtpClient.Open;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Send originator }
procedure TSmtpTestForm.MailFromButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.FromName := FromEdit.Text;
SmtpClient.MailFrom;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Send recipients }
procedure TSmtpTestForm.RcptToButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
BuildRcptList;
SmtpClient.RcptTo;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Send text and attached files to mail server }
procedure TSmtpTestForm.DataButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
BuildRcptList;
SmtpClient.HdrFrom := FromEdit.Text;
SmtpClient.HdrTo := ToEdit.Text;
SmtpClient.HdrCc := CcEdit.Text;
SmtpClient.HdrSubject := SubjectEdit.Text;
SmtpClient.EmailFiles := FileAttachMemo.Lines;
SmtpClient.Data;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ MailFrom, RcptTo and Data methods combined }
procedure TSmtpTestForm.MailButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
BuildRcptList;
SmtpClient.HdrFrom := FromEdit.Text;
SmtpClient.HdrTo := ToEdit.Text;
SmtpClient.HdrTo := CcEdit.Text;
SmtpClient.HdrSubject := SubjectEdit.Text;
SmtpClient.SignOn := SignOnEdit.Text;
SmtpClient.FromName := FromEdit.Text;
SmtpClient.EmailFiles := FileAttachMemo.Lines;
SmtpClient.Host := HostEdit.Text;
SmtpClient.Port := PortEdit.Text;
SmtpClient.Mail;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.QuitButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.Quit;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.AbortButtonClick(Sender: TObject);
begin
FAllInOneFlag := FALSE;
SmtpClient.Abort;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.SmtpClientRequestDone(
Sender : TObject;
RqType : TSmtpRequest;
Error : Word);
begin
{ For every operation, we display the status }
Display('RequestDone Rq=' + IntToStr(Ord(RqType)) +
' Error='+ IntToStr(Error));
{ Check if the user has asked for "All-In-One" demo }
if not FAllInOneFlag then
Exit; { No, nothing more to do here }
{ We are in "All-In-One" demo, start next operation }
{ But first check if previous one was OK }
if Error <> 0 then begin
FAllInOneFlag := FALSE; { Terminate All-In-One demo }
Display('Error, stoped All-In-One demo');
Exit;
end;
case RqType of
smtpConnect: SmtpClient.Helo;
smtpHelo: SmtpClient.MailFrom;
smtpMailFrom: SmtpClient.RcptTo;
smtpRcptTo: SmtpClient.Data;
smtpData: SmtpClient.Quit;
smtpQuit: Display('All-In-One done !');
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSmtpTestForm.AllInOneButtonClick(Sender: TObject);
begin
if SmtpClient.Connected then begin
MessageBeep(MB_OK);
Display('All-In-One demo start in non connected state.');
Display('Please quit or abort the connection first.');
Exit;
end;
FAllInOneFlag := TRUE;
{ Initialize all SMTP component properties from our GUI }
SmtpClient.Host := HostEdit.Text;
SmtpClient.Port := PortEdit.Text;
SmtpClient.SignOn := SignOnEdit.Text;
SmtpClient.FromName := FromEdit.Text;
SmtpClient.HdrFrom := FromEdit.Text;
SmtpClient.HdrTo := ToEdit.Text;
SmtpClient.HdrCc := CcEdit.Text;
SmtpClient.HdrSubject := SubjectEdit.Text;
SmtpClient.EmailFiles := FileAttachMemo.Lines;
{ Recipient list is computed from To, Cc and Bcc fields }
{ We use a little function to do that. }
BuildRcptList;
{ Start first operation to do to send an email }
{ Next operations are started from OnRequestDone event }
SmtpClient.Connect
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -