![]() |
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:
Der Fehler entsteht in der function TMail_Versand.SendEmail bei idSMTP.Connect;
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 FehlerCode lautet 10060 Connection timed out. Hat jemand eine Idee, was ich verändern muss? VIelen Dank Patrick |
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.
|
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