Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
826 Beiträge
 
Delphi 10.4 Sydney
 
#1

idSMTP.Connect schlägt fehl

  Alt 18. Mär 2020, 13:18
Hallo Zusammen,

ich habe seit Jahren eine Klasse, mit der ich Mails versende. Diese funktioniert auch bei bestehenden Programmen. Ich habe vor einem halben Jahr von XE2 auf 10.3 gewechselt und habe jetzt das Problem, dass keine Verbindung mehr bei idSMTP.Connect aufgebaut wird. Der Vollständigkeit hier die Klasse mit den wichtigsten Methoden:

Delphi-Quellcode:
unit TMail_VersandUnit;

interface

uses
   Messages, SysUtils, Variants, Classes, Dialogs, ExtCtrls, StdCtrls,
   ComCtrls,IdSMTP, IdMessage, Menus, Clipbrd, IDText,IdAttachment,
   IdAttachmentFile, IdSSL, Codes, Uni, Forms, ComObj, TDatenbankUnit,
   IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdGlobal;

type
   TMail_Versand= class
   strict protected
      FEmpfaenger: string;
      FBetreff: string;
      FBody: TStringList;
      FDatei_Pfad: string;
      FVorlagen_Pfad: string;
   private
      function SendEmail( Recipient : string; CCList : string; sSubject : string; Body : TStringList; Pfad : string ): boolean;
      procedure Set_Verbindungsdaten;
   public
      property Betreff : string read FBetreff write FBetreff;
      property Body : TStringList read FBody write FBody;
      property Empfaenger : string read FEmpfaenger write FEmpfaenger;
      property Datei_Pfad : string read FDatei_Pfad write FDatei_Pfad;
      property Vorlagen_Pfad : string read FVorlagen_Pfad write FVorlagen_Pfad;
      constructor create;
      function Versand(Dateianhang_delete: Boolean): boolean;
      procedure Set_Body(Auftrag, Datum, Verfasser, Kommentar, Tabelle: string);
   end;

var idSMTP: TidSMTP;
      idMessage: TidMessage;
      idSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
      Mail_Versand: TMail_Versand;
      Query: TUniQuery;

implementation

constructor TMail_Versand.create;
begin
   FBody:=TStringList.Create;
   idMessage := TidMessage.Create;
   idSMTP := TidSMTP.Create;
end;

procedure TMail_Versand.Set_Body(Auftrag, Datum, Verfasser, Kommentar, Tabelle: string);
var Datei: TextFile;
    MyString: String;
begin
   AssignFile(Datei, ExtractFilePath(Application.ExeName) + 'KommentarMailVorlage.txt');
   Reset(Datei);
   FBody.Clear;
   try
      while not eof (Datei) do begin
         ReadLn(Datei, MyString);
         MyString:=StringReplace(MyString, 'XXXAuftrag',Auftrag, [rfReplaceAll]);
         MyString:=StringReplace(MyString, 'XXXDATUMNEU', Datum, [rfReplaceAll]);
         MyString:=StringReplace(MyString, 'XXXVERFASSERNEU',Verfasser, [rfReplaceAll]);
         MyString:=StringReplace(MyString, 'XXXKommentar',Kommentar, [rfReplaceAll]);
         MyString:=StringReplace(MyString, 'XXXTABELLE', Tabelle, [rfReplaceAll]);
         FBody.Add(MyString);
      end;
   finally
      CloseFile(Datei);
   end;
end;

procedure TMail_Versand.Set_Verbindungsdaten;
var Datei: TextFile;
    MyString: String;
begin
  AssignFile(Datei, ExtractFilePath(Application.ExeName) + 'Mail.ini');
  Reset(Datei);
  try
    ReadLn(Datei, MyString);
    idSMTP.Host := copy(MyString, pos(':', MyString)+1, length(MyString));
    ReadLn(Datei, MyString);
    idSMTP.Username := copy(MyString, pos(':', MyString)+1, length(MyString));
    ReadLn(Datei, MyString);
    idSMTP.Password := copy(MyString, pos(':', MyString)+1, length(MyString));
    ReadLn(Datei, MyString);
    idSMTP.Port := StrToInt(copy(MyString, pos(':', MyString)+1, length(MyString)));
    ReadLn(Datei, MyString);
    idMessage.From.text := copy(MyString, pos(':', MyString)+1, length(MyString));
    idMessage.Sender.text := copy(MyString, pos(':', MyString)+1, length(MyString));
  finally
    CloseFile(Datei);
  end;
end;


function TMail_Versand.SendEmail( Recipient : string; CCList : string; sSubject : string; Body : TStringList; Pfad : string )
   : boolean;
var
   nAlarmnr : integer;
   Attachment : TIdAttachment;
begin
   Result := True;

   Set_Verbindungsdaten;

   idMessage.Recipients.EMailAddresses := Recipient;
   idMessage.CCList.EMailAddresses := CCList;
   idMessage.Subject := sSubject;
   idMessage.ContentType := 'multipart/*';

   with TidText.Create( idMessage.MessageParts, Body ) do begin
      ContentType := 'text/html';
   end;

   if Pfad<>'then begin
      with TIdAttachmentFile.Create( idMessage.MessageParts, Pfad ) do begin
         idMessage.MessageParts.Add( );
      end;
   end;

   try
      idSMTP.Connect; //Hier entsteht der Fehler
      try
         idSMTP.Send( idMessage );
         Result := True;
      finally
      idSMTP.Disconnect;
      idMessage.Clear;
      end;
   except
      Result := False;
   end;
end;


function TMail_Versand.Versand (Dateianhang_delete: Boolean):boolean;
begin
   {! Empfaenger, Betreff, Text und der Dateianhang kommen aus der aufrufenden Procedure}
   Try
      Result:= SendEmail(empfaenger, '', betreff, FBody, FDatei_Pfad);
      if Result and Dateianhang_delete then
         deleteFile(FDatei_Pfad);
   Except
      Result:=false;
   End;
end;

initialization
   Mail_Versand := TMail_Versand.Create;

finalization
   idSMTP.Free;
   idMessage.Free;
   if Mail_Versand.Body <> nil then
      Mail_Versand.Body.Free;
   if Mail_Versand <> nil then
      Mail_Versand.Free;

end.
Der Fehler entsteht in der function TMail_Versand.SendEmail bei idSMTP.Connect;

Der FehlerCode lautet 10060 Connection timed out.

Hat jemand eine Idee, was ich verändern muss?
VIelen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat