Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdPOP3 + SSL: Immer "Connection closed gracefully" (https://www.delphipraxis.net/134587-idpop3-ssl-immer-connection-closed-gracefully.html)

lastwulf 25. Mai 2009 12:40


IdPOP3 + SSL: Immer "Connection closed gracefully"
 
Hi,

In meinem Projekt benutze ich IdPOP3 mit IdSSLIOHandlerSocketOpenSSL.
Nur aus irgendeinem Grund bricht die Verbindung sofort, egal bei welchem Server, mit "Connection closed gracefully" ab (Auch wenn Firewall/AV deaktiviert).
Habe die Server von Yahoo, GMail und Freenet getestet. Überall das selbe.
Die Meldung "Connection closed gracefully" wird instantan nach idpop31.Connect() ausgegeben.
Ich habe mal per Wireshark mitgeschnüffelt und es findet überhaupt keine Kommunikation statt?! :gruebel:

Hier mein Code:
(Ich benutze Borland Delphi 7 mit Indy 10)
Delphi-Quellcode:
    idssliohandlersocketopenssl1 := Tidssliohandlersocketopenssl.Create(nil);
    idssliohandlersocketopenssl1.SSLOptions.Mode := sslmUnassigned;
    idssliohandlersocketopenssl1.SSLOptions.Method := sslvSSLv3; // Kein Erfolg mit sslvSSLv2
    idpop31 := tidpop3.Create(nil);
    idpop31.IOHandler := idssliohandlersocketopenssl1;
    idpop31.UseTLS := utUseExplicitTLS; // Kein Erfolg mit utUseImplicitTLS etc.
    idpop31.Host := server; //Im Vorfeld deklariert, auf jeden Fall richtig
    idssliohandlersocketopenssl1.Host := server;
    idpop31.Username := user; //Im Vorfeld deklariert, auf jeden Fall richtig
    idpop31.Password := password; //Im Vorfeld deklariert, auf jeden Fall richtig
    idpop31.Port := 995;
    idpop31.ConnectTimeout := 5000;
    idpop31.ReadTimeout := 5000;

    try
        idpop31.Connect(); // Hierbei Exception EidConnectionClosedGracefully
        memo1.Lines.Add(IntToStr(idpop31.CheckMessages)+' E-Mails gefunden.');
        idpop31.Disconnect();
    except
       on E : Exception do
       begin
        Memo1.Lines.Add('ERROR: '+E.Message+' // '+E.ClassName);
       end;

     end;

    end;

Der Fehler ist mir rätselhaft, zumal mein Programm ja nicht einmal mit dem Server Kontakt aufnimmt :?

Vielleicht weiß hier einer besser Bescheid :)

OG Karotte 26. Mai 2009 20:03

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Hast Du Dir schon mal dieses oder dieses angeschaut?

lastwulf 26. Mai 2009 20:55

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Jo, thx. Dieser Code funktioniert bei mir. Ich kann aber eigentlich keinen großen Unterschied entdecken? Werd morgen mal näher reinschauen.

lastwulf 27. Mai 2009 15:35

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Verdammt, die Einstellungen sind jetzt genau gleich, aber es kommt immer noch "Connection closed gracefully".
Irgendwas läuft hier falsch :(

OG Karotte 27. Mai 2009 15:42

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Meist sind es nur Kleinigkeiten die zwischen Erfolg und Misserfolg liegen.

Bist Du Dir sicher das:

a.) Der Code gem. #3 funktioniert (hat)

b.) Deine Einstellungen wirklich korrekt sind ?

und btw "Connection closed gracefully" ist kein Fehler sondern nur die "Nachricht" das der Server/die Gegenstelle die Verbindung beendet hat...

lastwulf 27. Mai 2009 16:26

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
a) Was meinst du mit #3?
b) Ja

Das ist mir klar, was "Connection closed gracefully" bedeutet, aber sollte dazu nicht mit dem Server kommuniziert werden? (Wireshark zeigt nichts an :? )

OG Karotte 27. Mai 2009 18:42

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Zitat:

Zitat von lastwulf
a) Was meinst du mit #3?

Deinen Beitrag (welches der Dritte in diesem Thread ist):
Zitat:

Zitat von lastwulf
Jo, thx. Dieser Code funktioniert bei mir. Ich kann aber eigentlich keinen großen Unterschied entdecken? Werd morgen mal näher reinschauen.

Hast Du auch mal den Beitrag #12 des ersten von mir genannten Threads beachtet???

Nutze doch mal das Statusinfo - Event von Deinem IOHandler, da müsste eigentlich die Kommunikation mit zu verfolgen sein...

lastwulf 27. Mai 2009 18:50

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Hab ich gemacht:
Delphi-Quellcode:
procedure TForm1.IdSSLIOHandlerSocketOpenSSL1Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
Memo1.Lines.Add('idSSL: ' +AStatusText);
end;

procedure TForm1.IdSSLIOHandlerSocketOpenSSL1StatusInfo(Msg: String);
begin
Memo1.Lines.Add('idSSL: ' +Msg);
end;

procedure TForm1.IdPOP31Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
  Memo1.Lines.Add('idSSL: ' +AStatusText);
end;
Aber es wird nichts angezeigt! Was läuft da wohl schief :- /
Aber Danke für die Hilfe

OG Karotte 27. Mai 2009 18:56

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Ja was denn nu: Funktioniert der in #3 verlinkte Code oder nicht?

lastwulf 27. Mai 2009 19:03

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Sry, ja, der funktioniert.

OG Karotte 27. Mai 2009 19:18

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Wo ist dann das Problem... :gruebel:

lastwulf 27. Mai 2009 19:20

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Mein eigener Code in #1, der in meinem Programm eingebettet ist, funktioniert aus irgendeinem Grund nicht.

OG Karotte 27. Mai 2009 19:30

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Dann vergleiche noch mal gaaaaaanz genau...

... wie gesagt meist ist es nur eine Kleinigkeit (und die evtl. auch noch an ganz anderer Stelle als vermutet; z.B. wird in #12 des besagten Threads von Assertor darauf hingewiesen, das gmail nur mit 'utUseImplicitTLS' funktioniert. Ausserdem scheint auch SSLv3 benötigt zu werden).

lastwulf 27. Mai 2009 19:54

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Ich glaube ich konnte das Problem, aber nicht die Ursache finden.
In IdPOP3.Connect:

Delphi-Quellcode:
  if (IOHandler is TIdSSLIOHandlerSocketBase) then begin
      case FUseTLS of
       utNoTLSSupport :
       begin
        (IOHandler as TIdSSLIOHandlerSocketBase).PassThrough := true;
       end;
       utUseImplicitTLS :
       begin
         (IOHandler as TIdSSLIOHandlerSocketBase).PassThrough := False;
       end
       else
        if FUseTLS<>utUseImplicitTLS then begin
         (IOHandler as TIdSSLIOHandlerSocketBase).PassThrough := true;
        end;
      end;
  end;
(IOHandler is TIdSSLIOHandlerSocketBase) Ist im funktionierenden Code wahr, in meinem falsch. Das kann ich mir nicht erklären, da in beiden Codes IdPOP3 der IOHandler IdSSLIOHandlerSocketOpenSSL zugewiesen wird.

OG Karotte 27. Mai 2009 20:23

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Erzeugst Du den Handler / Pop3 immer noch händisch oder liegen die Teile auf der Form?

Kann es evtl. sein das Du im Objektinspektor entweder für den die IOHandler- und/oder die POP3- Komponente etwas anderes als die defaultwerte eingetragen hast, die dann im Code von Dir nicht angepasst werden?

Also zum Beispiel bei dem IOHandler die zuverwendende IPVersion oder die SSLOptions?

Ist UseTLS auf utUseImplicitTLS ???

Zeig doch nochmal den aktuellen Code....

lastwulf 27. Mai 2009 21:15

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Zitat:

Zitat von OG Karotte
Erzeugst Du den Handler / Pop3 immer noch händisch oder liegen die Teile auf der Form?

Liegen in der Form.

Zitat:

Zitat von OG Karotte
Kann es evtl. sein das Du im Objektinspektor entweder für den die IOHandler- und/oder die POP3- Komponente etwas anderes als die defaultwerte eingetragen hast, die dann im Code von Dir nicht angepasst werden?
Also zum Beispiel bei dem IOHandler die zuverwendende IPVersion oder die SSLOptions?

Ja, aber das sind die selben Werte wie im funktionierenden Code


Zitat:

Zitat von OG Karotte
Ist UseTLS auf utUseImplicitTLS ???

Ja

Zitat:

Zitat von OG Karotte
Zeig doch nochmal den aktuellen Code....

Ok :)

In der unit1.pas:
Delphi-Quellcode:
    idssliohandlersocketopenssl1 := Tidssliohandlersocketopenssl.Create(nil);
    idpop31 := tidpop3.Create(nil);
    idpop31.Host := server;
    idssliohandlersocketopenssl1.Host := server;
    idssliohandlersocketopenssl1.Destination := server +':995';
    idpop31.Username := user;
    idpop31.Password := password;

     try
        idpop31.Connect;
     except
       on E : Exception do
       begin
        Memo1.Lines.Add('ERROR: '+E.Message+' // '+E.ClassName);
       end;
     end;
In Unit1.dfm:

Delphi-Quellcode:
  object IdPOP31: TIdPOP3
    OnStatus = IdPOP31Status
    IOHandler = IdSSLIOHandlerSocketOpenSSL1
    AutoLogin = True
    UseTLS = utUseImplicitTLS
    Port = 995
    SASLMechanisms = <>
    Left = 432
    Top = 16
  end
  object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
    OnStatus = IdSSLIOHandlerSocketOpenSSL1Status
    MaxLineAction = maException
    Port = 995
    DefaultPort = 0
    SSLOptions.Method = sslvSSLv3
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    OnStatusInfo = IdSSLIOHandlerSocketOpenSSL1StatusInfo
    Left = 440
    Top = 48
  end

OG Karotte 28. Mai 2009 13:37

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Durch

Delphi-Quellcode:
idssliohandlersocketopenssl1 := Tidssliohandlersocketopenssl.Create(nil);
    idpop31 := tidpop3.Create(nil);
und

Delphi-Quellcode:
object IdPOP31: TIdPOP3
...
object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
...
erzeugst Du meiner Meinung nach zweimal das jeweilige Objekt:

1. Beim Initialisieren der Form werden die Objekte erzeugt / initialisiert (mit den Werten aus dem OI)
2. Irgendwann in Deinem Code (k.A. wann genau, da die aufrufende / beinhaltende Funktion nicht zu sehen ist, aber aufjedenfall nach 1.) werden diese quasi nochmals erzeugt / initialisiert (und zwar mit ihren Default :!: -Werten)

Hast Du also im OI bestimmte Werte geändert, so sind diese durch die erneute Erzeugung/ Initialisierung verloren bzw. durch die Defaultwerte überschrieben. Dies erklärt warum z.B. die Routine

Delphi-Quellcode:
procedure TForm1.IdSSLIOHandlerSocketOpenSSL1StatusInfo(Msg: String);
begin
Memo1.Lines.Add('idSSL: ' +Msg);
end;
quasi nie aufgerufen wird (und damit natürlich auch kein Ergebnis liefern kann), da sie im Objekt:
Delphi-Quellcode:
idssliohandlersocketopenssl1 := Tidssliohandlersocketopenssl.Create(nil);
nicht vorhanden / gesetzt ist.

lastwulf 28. Mai 2009 18:14

Re: IdPOP3 + SSL: Immer "Connection closed gracefully&a
 
Danke für die Hilfe. Bin mittlerweile auf Delphi 2009 umgestiegen. Funktioniert soweit.
Nur die üblichen paar Bugs :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 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