Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   idSMTP.Connect schlägt fehl (https://www.delphipraxis.net/203740-idsmtp-connect-schlaegt-fehl.html)

Ykcim 18. Mär 2020 13:18

idSMTP.Connect schlägt fehl
 
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

Rolf Frei 18. Mär 2020 13:51

AW: idSMTP.Connect schlägt fehl
 
Socket Error 10060 heisst, dass der Host nicht erreichbar ist. Also überprüfe mal deine Daten der idSMTP Klasse, ob da alles korrekt gesetzt ist beim Connet. Hostname, Port, etc. korrekt? Ist eine Firewall im Spiel, die das blockiert? Stell mal die Windows Firewall komplett ab, um sicher zu gehen, dass es nicht daran liegt.

Ykcim 18. Mär 2020 16:12

AW: idSMTP.Connect schlägt fehl
 
Hallo Zusammen,

das Thema ist erledigt. Es war tatsächlich die Firewall. Seitens der Holding wurde etwas umgestellt. Jetzt funktioniert es wieder.

Sorry!

Gruß Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz