Thema: Delphi Versand per SMTP

Einzelnen Beitrag anzeigen

H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Versand per SMTP

  Alt 17. Jan 2023, 17:54
Moin,

ich habe folgendes Testprogramm und folgende Fragen:

1: Ich würde erwarten das ich bei vier versendeten Mails immer nur 4 Anhänge (Test1-Test4) bekomme. Aber ich bekomme in der ersten Mail 4 Anhänge, in der zweiten Mail 8 usw. Ich hätte aber gedacht das das "iAttachment.Free;" am Ende des versenden reicht um die "alten" Anhänge zu löschen.

2: Ich hätte gedacht das die beiden Zeilen

Delphi-Quellcode:
  Form1.Memo1.Lines.Add('Beginn Mailerstellung: ' +FloatToStr(Runde));
  Form1.IdMessage1.Body.Assign(Form1.Memo1.Lines);
den Body-Text der Mail neu setzen. Statt dessen kommt aber imer der gleiche Text der ersten Schleife und die anderen Schleifen ändern den Text nicht mehr.

Und nun - was mache ich denn falsch ??

Gruss
Hans

Delphi-Quellcode:
unit SSLMail2Unit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP, IdBaseComponent, IdMessage, IDAttachment, IdAttachmentFile, IDGlobal;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdMessage1: TIdMessage;
    IdSMTP1: TIdSMTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure MailConnect;
begin
    Form1.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
    Form1.IdSMTP1.Host := 'smtp.strato.de';
    Form1.IdSMTP1.Port := 465;
    Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
    Form1.IdSMTP1.Username := 'h.bothur@xxx.xx'; // Benutzername
    Form1.IdSMTP1.Password := 'Passwort'; // Passwort
    // Verbinden mit Server
    Form1.Memo1.Lines.Add('Beginn Connect');
    try
     Form1.IdSMTP1.Connect;
    except
     on E: Exception do
      begin
         Form1.Memo1.Lines.Add('>> Fehler Connect: ');
         Form1.Memo1.Lines.Add('>> ' +e.message +': ');
         Application.MessageBox (PChar(E.Message),'Verbindungsfehler Connect!',MB_OK);
         Form1.IdSMTP1.Disconnect;
         exit;
      end;
    end;
    Form1.Memo1.Lines.Add('Connected');
    Form1.Memo1.Lines.Add('');
end;

procedure MailVersenden(Runde: integer);
var
  iAttachment : TIdAttachment;
begin
  Form1.Memo1.Lines.Add('Beginn Mailerstellung: ' +FloatToStr(Runde));
  Form1.IdMessage1.Body.Assign(Form1.Memo1.Lines); // der eigentliche eMail -Text aus einem TMemo
  Form1.IdMessage1.Priority := TIdMessagePriority(2); // Priorität
  Form1.IdMessage1.Recipients.EMailAddresses := 'hans.hgbothur.de'; // Empfängeradresse
  Form1.IdMessage1.ReplyTo.EMailAddresses := 'h.bothur@hermann-juergensen.de'; // Anwortadresse
  Form1.IdMessage1.From.Text := 'h.bothur@hermann-juergensen.de'; // Absenderadresse
  Form1.IdMessage1.ContentType := 'multipart/*'; // mit Anhang!
  Form1.IdMessage1.Subject := 'Testmail: ' +FloatToStr(Runde);
  iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test1.pdf') ;
  iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test2.pdf') ;
  iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test3.pdf') ;
  iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test4.pdf') ;

  Form1.Memo1.Lines.Add('Beginn Senden: ' +FloatToStr(Runde));
  try
     if Form1.IdSMTP1.Connected then Form1.IdSMTP1.Send(Form1.IdMessage1);
  except
    on E: Exception do
    begin
       Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK);
       Form1.IdSMTP1.Disconnect;
       exit;
    end;
  end;
  iAttachment.Free;
  Form1.Memo1.Lines.Add('Ende Senden: ' +FloatToStr(Runde));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  MailConnect;
  for i := 1 to 4 do
  begin
    MailVersenden(i);
    Memo1.Lines.Add('');
  end;
  IdSMTP1.Disconnect;
end;

end.
Hans-Georg Bothur
www.hermann-juergensen.de

Geändert von H.Bothur (17. Jan 2023 um 22:53 Uhr) Grund: Zugangsdaten rausgenommen :-)
  Mit Zitat antworten Zitat