Indy 10 - IdSMTP.Send () hängt, wenn Nachrichten von Google Mail-Konto zu senden
Frage
Ich versuche, eine E-Mail mit Google Mail-Konto (Delphi 7, Indy 10) mit diesen Einstellungen an:
TIdSmtp:
Port = 587;
UseTLS := utUseExplicitTLS;
TIdSSLIOHandlerSocketOpenSSL:
SSLOptions.Method := sslvTLSv1;
scheint alles Set in Ordnung zu sein. Ich erhalte diese Antwort:
Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
; bits = 128; version = TLSv1/SSLv3;
Und dann hängt es und nicht beendet. E-Mail wird nicht gesendet. Was kann das Problem sein?
Lösung 2
Das Problem war einfach. Ich war nicht geduldig genug und Anwendung nicht hängen, gibt es lange Timeout. Das Timeout war Ergebnis von falschen Einstellungen.
Andere Tipps
Ja, ich habe gesehen, viele Probleme mit Indy10 und tls (in der Regel gmail).
zuerst sicherstellen, dass Sie die neueste ssl Bibliotheken von hier
Ich habe intermittierende Stände und Fehler gesehen, die in der bleeding edge Version von indy behoben wurden (dh. Eine nicht-stabile Version). finden Sie unter http://www.indyproject.org/sockets/download/svn.DE aspx
für gmail, i allgemein implicityTLS auf Port 465 verwenden ..
idSmtp := TIdSMTP.Create(nil);
try
idSmtp.IOHandler := nil;
idSmtp.ManagedIOHandler := true;
// try to use SSL
try
TIdSSLContext.Create.Free;
idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
if (smtpSettings.port = 465) then
idSmtp.UseTLS := utUseImplicitTLS
else
idSmtp.UseTLS := utUseExplicitTLS;
except
idSmtp.IOHandler.Free;
idSmtp.IOHandler := nil;
end;
if (idSmtp.IOHandler = nil) then
begin
idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
idSmtp.UseTLS := utNoTLSSupport;
end;
// send message, etc
finally
idSmtp.Free;
end;
Als erstes müssen Sie den Code überprüft wird mit anderen E-Mail-Server zu arbeiten?
Vor einiger Zeit hat jemand erwähnte sie Probleme mit bestimmten Servern zu akzeptieren HTTP-Anfragen mit der Indy TIdHTTP Komponente. Der Grund war, sie hatte Indy als Teil des User-Agenten enthalten:
Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
Wenn sie entfernt Indy-Bibliothek es funktioniert. Offenbar gab es einige bösartige Web-Services mit Indy erstellt, so dass einige Websites Verbindungen von Anwendungen erstellt mit ablehnen wird.
Ich bin nicht sicher, ob die Komponente, die Sie verwenden, jede Art von Useragent-Eigenschaft hat. Aber wenn es funktioniert, null heraus alle Verweise auf Indy.
Wenn Indy testen, sollten Sie sicher sein, dass „Stop auf Delphi Ausnahmen“ aktiviert ist (Extras, Debugger-Optionen, Sprache Ausnahmen).
Einige Routinen, speziell idSMTP.Send, ‚frisst‘ (oder versteckt) Ausnahmen in einem resultierenden aufzuhängen.