delphi - Indy 10-IdSMTP.Send() se bloquea al enviar mensajes desde la cuenta de GMail
delphi-7 (4)
En primer lugar, ¿ha verificado que el código está funcionando con otros servidores de correo electrónico?
Hace algún tiempo, alguien mencionó que tenían problemas con ciertos servidores que aceptaban solicitudes http con el componente TIdHTTP de Indy. El motivo fue que incluyeron a Indy como parte del agente de uso:
Request.UserAgent := ''Mozilla/3.0 (compatible; Indy Library)'';
Cuando eliminaron la Biblioteca Indy , funcionó. Evidentemente, se han creado algunos servicios web malignos con Indy, por lo que algunos sitios rechazarán las conexiones de las aplicaciones creadas con él.
No estoy seguro de si el componente que está utilizando tiene algún tipo de propiedad UserAgent. Pero si lo hace, anule cualquier referencia a Indy.
Estoy intentando enviar un correo electrónico usando la cuenta de Gmail (Delphi 7, Indy 10) con estas configuraciones:
TIdSmtp:
Port = 587;
UseTLS := utUseExplicitTLS;
TIdSSLIOHandlerSocketOpenSSL:
SSLOptions.Method := sslvTLSv1;
Todo parece estar bien. Recibo esta respuesta:
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;
Y luego se cuelga y no termina. El correo electrónico no se envía. ¿Cual puede ser el problema?
sí, he visto muchos problemas con indy10 y tls (generalmente gmail).
primero asegúrate de tener las últimas bibliotecas ssl de aquí
He visto paradas intermitentes y errores que se han resuelto en la versión de indy de última generación (es decir, una versión no estable). ver http://www.indyproject.org/sockets/download/svn.DE.aspx
para gmail, generalmente uso implicityTLS en el puerto 465 ..
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;
El problema fue simple. No fui lo suficientemente paciente y la aplicación no se colgó, hubo un tiempo de espera prolongado. El tiempo de espera fue el resultado de una configuración incorrecta.
Al probar Indy, debe asegurarse de que esté seleccionada la opción "Detener excepciones de Delphi" (Herramientas, Opciones de depuración, Excepciones de idioma).
Algunas rutinas, específicamente idSMTP.Send, ''come'' (u oculta) excepciones que dan como resultado un cuelgue.