Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   SMTP-Problem, Indy und TLS 1.3 oder ICS (https://www.delphipraxis.net/208544-smtp-problem-indy-und-tls-1-3-oder-ics.html)

HappyJoe 12. Aug 2021 18:59

SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Hallo,

gestern hat strato TLS 1.0 und 1.1 abgeschaltet und jetzt geht unser Mailversand nicht mehr. Bisher hatte ich die Indy10-Routinen (TIdSMTP und TIdSSLIOHandlerSocketOpenSSL) unter Delphi XE benutzt, aber die unterstützen kein TLS 1.3. Deshalb habe ich die ICS-Routinen installiert, habe aber bereits Probleme bei dem Beispiel-Programm
icsv866\Samples\Delphi\MailNewsDemos\OverbyteIcsMa ilSnd1.
Beim strato-Postfach kommt die Meldung "Connecting to SMTP server ..." und er bleibt hängen. Alternativ habe ich auch gmx probiert (was mit den indys noch problemlos funktioniert). Hier komme ich zwar weiter, aber bei der Authentication ist auch hier Schluss. Das Protokoll sieht so aus

Connecting to SMTP server...
220 gmx.net (mrgmx105) Nemesis ESMTP Service ready
< 220 gmx.net (mrgmx105) Nemesis ESMTP Service ready
RequestDone Rq=0 No Error
EHLO i5-2015
> EHLO i5-2015
250-gmx.net Hello i5-2015 [79.212.23.214]
< 250-gmx.net Hello i5-2015 [79.212.23.214]
250-8BITMIME
< 250-8BITMIME
250-SIZE 69920427
< 250-SIZE 69920427
250 STARTTLS
< 250 STARTTLS
RequestDone Rq=10 No Error
AUTH CRAM-MD5
> AUTH CRAM-MD5
530 Must issue a STARTTLS command first
< 530 Must issue a STARTTLS command first
RequestDone Rq=11 Error: 500 Authentication Type could not be determined.
Error, stoped All-In-One demo

Die Authentication ist AutoSelect, aber auch alle anderen Einstellungen gehen nicht.

Hat jemand eine Idee, warum das DemoProg nicht funktioniert oder auch wie ich möglichst schnell wieder versenden kann?

TurboMagic 12. Aug 2021 20:09

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Falls du hier nicht weiterkommen solltest: in der en.delphipraxis.net gibt's ein ICS Unterforum wo die Entwickler mit lesen und antworten. Alternativ gibt's für die Übergangszeit SMTPRelay oder so, das liefe auf dem Mail sendenden PC, gibt sich dort als unvrschlüsselter SMTP Server aus und kann mit dem richtigen SMTP Server passend reden.

philipp.hofmann 12. Aug 2021 20:38

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Just for info: Mit Indy geht TLS 1.2 und dies wird von Strato noch unterstützt. So habe ich das Problem gelöst. War ein 10 Minüter und es finden sich hier im Forum auch schon Beispiele, wie es anzuwenden ist.

HappyJoe 12. Aug 2021 21:12

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
@TurboMagic
Danke für die Info.

@philipp.hofmann
Das wäre super, wenn das ginge, aber bist du sicher, dass das auch mit Delphi XE2 geht? In meiner IdSSLOpenSSL.pas (Indy10) steht

TIdSSLVersion = (sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1);

und damit ging es bei mir leider nicht :(

Delphi.Narium 12. Aug 2021 21:30

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Indys mal aktuallisieren?

Mein olles Delphi 7 kann jedenfalls
Delphi-Quellcode:
TIdSSLVersion = (sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2)

HappyJoe 12. Aug 2021 22:05

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Ja, das hatte ich versucht, aber nichts gefunden. Wo bekomme ich denn ein Update her? Alle Links, auch hier aus dem Forum, sind veraltet, wie z.B.
https://www.indyproject.org/download/v10

Delphi.Narium 12. Aug 2021 22:18

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Meine Suchmaschine liefert mit indy github als erstes Ergebnis die passende Stelle: https://github.com/IndySockets/

HappyJoe 12. Aug 2021 22:27

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Habe mir indy-master.zip runtergeladen, sieht aber verwirrend aus. Das packe ich heute nicht mehr. Morgen kann ich vielleicht wieder klarer denken.

Erst einmal vielen Dank für deine Hilfe.

Delphi.Narium 12. Aug 2021 22:38

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Zip auspacken.

XE2 entspricht der VER230 (http://docwiki.embarcadero.com/RADSt...piler_Versions)

Demnach dürfte Indy230.groupproj für Dich interessant sein.

Oder aus dem Verzeichnis Core die Packages IndyCore230.dpk und dclIndyCore230.dpk kompilieren und installieren.

Bei Delphi 7 mache ich das immer ganz einfach:

Vorhandenes Indy-Verzeichnis umbenennen.

Neues Indy-Verzeichnis umbenennen, so dass es den "alten" Namen bekommt.

Die beiden o. g. Packages in der genannten Reihenfolge öffnen und kompilieren bzw. installieren. Klappt eigentlich immer.

HappyJoe 13. Aug 2021 09:52

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ach, du hast mich so glücklich gemacht. 26 neuen Kompos wurden installiert (von TIdAntiFreeze bis TIdUPDServer), ...

..bis ich mein Prog öffnen wollte. Irgendwie scheint noch was von den alten Indys da zu sein, obwohl ich den Ordner umbenannt habe (Fehlermeldung s. Grafik). Klicke ich auf abbrechen und starte mein Prog erneut, kommt die Meldung "Klasse TIdSMTP nicht gefunden". TIdSMTP ist bei den neuen Kompos auch nicht aufgeführt. Hast du eine Idee, woran das liegen kann?

Delphi.Narium 13. Aug 2021 10:40

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Ggfls. musst Du all "alten" .DCU von Indy, wo immer auch bei Deinen Projekten der Ausgabepfad dafür sein mag, löschen.

Kompilieren alleine reicht nicht zwingend, eventuell mal "alles neu erstellen".

Das Package mit der 160 im Namen gehört wohl zu Delphi 8.

Dann mal in der IDE nachschauen, welche Packages da so alles installiert sind und auch hier für Ordnung sorgen. Ggfls. dort mal alle momentan installierten Packages von Indy entfernen und dann nur die für Dein Delphi relevanten installieren.

Da solltest Du mal gründlich aufräumen und sicherstellen, dass Du nur die zu Deiner Delphiversion gehörenden Packages nutzt. Mal aus dem Verzeichnis mit den kompilieren Packages (*.bpl) alles entfernen, was zu alten Indyversionen gehört. Vorher die IDE zumachen. Beim Neustart der IDE wird sie Dich dann darüber informieren, was da so schiefgeht, z. B. Dich informieren, dass "alte" Indypackages nicht mehr geladen werden können ... (was ja durchaus erwünscht ist).

Du kannst dazu auch im "neuen Indyverzeichnis" mal alles "wegwerfen", was nicht zu Deiner Delphiversion gehört, das dürften vermutlich alle Dateien unter \Lib\Core\ sein, die am Ende eine Zahl im Namen haben, die aber nicht 230 ist. So ungefähr alles von dclIndyCore100.* bis dclIndyCore220.* und alles ab dclIndyCore240.* bis dclindycorelaz.*, analog dann auch noch für IndyCore*.*, unter \Lib\Protocols\ sieht es ähnlich aus, ebenso unter \Lib\System\.

Für Dein Delphi dürftest Du wohl alles benötigen, was in Indy230.groupproj aufgeführt ist. Die Projektgruppe zu verwenden, wäre eventuell auch keine schlechte Idee. Damit sollte eigentlich alles für Dein Delphi korrekt kompiliert und installiert werden können.

Mal in allen Pfaden nach dem Package IndySystem160 suchen.

HappyJoe 13. Aug 2021 17:42

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt habe ich deine Ratschläge befolgt und alles ist installiert und ich kann mein Prog sogar compilieren. Dein ausführlicher Post war echt super, danke.
Leider geht der Verbindungsaufbau zu strato trotzdem nicht. Je nachdem, welche Version ich einstelle, kommen unterschiedliche Fehlermeldung (s. Grafik). Vermutlich fehlen nur noch ein paar Einstellungen. Würdest du mal einen kurzen Blick auf meine Routine werfen? Vielleicht springt dir der Fehler ja sofort ins Auge. Brauche ich eine spezielle Version von libeay32.dll oder ssleay32.dll?

Delphi-Quellcode:
procedure TMainForm.Btn_TESTMAILClick(Sender: TObject);
var
  idAttachment : TIdAttachmentFile;
  Mail : TIdMessage;
  SMTP : TIdSMTP;
  SSL : TIdSSLIOHandlerSocketOpenSSL;
  MBHTML: TIdMessageBuilderHTML;
  MailText : string;

begin
  SMTP := TIdSMTP.Create;
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP);
  SSL.SSLOptions.SSLVersions := [sslvTLSv1_2];           //XXX

  Mail := TIdMessage.Create;

  try
    MBHTML := TIdMessageBuilderHTML.Create;
    try
      with MBHTML do
      begin
        HTML.Text := 'Die ist eine Testmail.';
        HtmlCharSet := 'utf-8';
        FillMessage(Mail);
      end;
    finally
      MBHTML.Free;
    end;

    with Mail do
    begin
      From.Address := ... ;
      From.Name   := ... ;
      Recipients.EMailAddresses := ... ;
      Subject := 'Test-Mail';
    end;

    with SMTP do
    begin
      Host     := 'smtp.strato.de';
      Username := ... ;
      Password := ... ;
      Port     := 465;
      AuthType := satDefault;
      IOHandler := SSL;
      UseTLS   := utUseImplicitTLS;

      try
        Connect;
        Send(Mail);
      finally
        Disconnect;
      end;
    end;
  finally
    Mail.Free;
    SMTP.Free;
  end;
end;

Union 13. Aug 2021 18:16

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Welche Versionen der OpenSSL dll verwendest Du?

HappyJoe 13. Aug 2021 18:23

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Version 0.9.8.14

Union 13. Aug 2021 18:31

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
DIe Version sollte > 1 sein. Ich setze hier u.a. 1.0.2.12 ein. Zum Herumspielen unter Erhaltung der Interoperabilität empfiehlt es sich, die dlls jeweils gezielt von Indy laden zu lassen.
Delphi-Quellcode:
IdSSLOpenSSLHeaders.IdOpenSSLSetLibPath(<Pfad der ssl dll>);

HappyJoe 13. Aug 2021 18:41

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
DANKE DANKE an alle, die mir hier geholfen haben.

ES FUNKTIONIERT ALLES !!!

Union 13. Aug 2021 18:51

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Hört sich schon mal gut an. Um für die Zukunft gerüstet zu sein, solltest du einmal die TIdSMTP.SASLMechanisms Collection anschauen und ggf. alle reinaddieren. Dann wird die AUTH response Indy dazu bewegen, das korrekte Verfahren zu verwenden.

HappyJoe 13. Aug 2021 20:53

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Das sagt mir jetzt alles noch nichts, aber da werde ich hier im Forum mal etwas stöbern. Meinst du, das wäre besser als die ICS-Routinen?

Union 14. Aug 2021 23:09

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
ICS habe ich bisher nicht eingesetzt. Ich verwende möglichst das Winhttp und wenn dort etwas nicht verfügbar ist, die Indy.

freimatz 16. Aug 2021 10:10

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Zitat:

Zitat von Union (Beitrag 1493573)
DIe Version sollte > 1 sein. Ich setze hier u.a. 1.0.2.12 ein. Zum Herumspielen unter Erhaltung der Interoperabilität empfiehlt es sich, die dlls jeweils gezielt von Indy laden zu lassen.
Delphi-Quellcode:
IdSSLOpenSSLHeaders.IdOpenSSLSetLibPath(<Pfad der ssl dll>);

Ist das nötig wenn die DLLs im Programmverzeichnis liegen?

Union 16. Aug 2021 12:14

AW: SMTP-Problem, Indy und TLS 1.3 oder ICS
 
Zitat:

Zitat von freimatz (Beitrag 1493610)
Zitat:

Zitat von Union (Beitrag 1493573)
DIe Version sollte > 1 sein. Ich setze hier u.a. 1.0.2.12 ein. Zum Herumspielen unter Erhaltung der Interoperabilität empfiehlt es sich, die dlls jeweils gezielt von Indy laden zu lassen.
Delphi-Quellcode:
IdSSLOpenSSLHeaders.IdOpenSSLSetLibPath(<Pfad der ssl dll>);

Ist das nötig wenn die DLLs im Programmverzeichnis liegen?

Nötig nicht unbedingt, aber eindeutiger.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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-2025 by Thomas Breitkreuz