PDA

Ver la Versión Completa : Sobre error para enviar email por gmail


lduron
23-03-2009, 05:43:32
Hola Amigos!

Tengo el siguiente código:

procedure TForm1.Button1Click(Sender: TObject);
begin
IdMessage1.Clear;
IdMessage1.From.Address:='x@gmail.com';
IdMessage1.Subject:='Hola';
IdMessage1.Body.Text:='Hola como te va?';
IdMessage1.Priority:=TIdMessagePriority(mpNormal);
IdSMTP1.Port:=587;
IdSMTP1.Host:='smtp.gmail.com';
IdSMTP1.UseTLS:=utUseRequireTLS;
IdSMTP1.Username:='x';
IdSMTP1.Password:='x...';
IdSMTP1.Connect;
IdSMTP1.Send(IdMessage1);
IdSMTP1.Disconnect;
end;

Y me manda el siguiente error:

Project:Project1.exe raised exception class EIdTLSClientSSLIOHandlerRequred with message 'SSLIOHandler is required for this setting'

A que se refiere con esto?

Muchas gracias por la atención que tiene para leer este mensaje.

roman
23-03-2009, 16:33:39
Para enviar correo por GMail necesitas usar el protocolo SSL. Aquí (http://clubdelphi.com/foros/showthread.php?t=40611#post184037) tienes un ejemplo.

// Saludos

Caro
23-03-2009, 16:37:43
Y me manda el siguiente error:

Project:Project1.exe raised exception class EIdTLSClientSSLIOHandlerRequred with message 'SSLIOHandler is required for this setting'

A que se refiere con esto?


Hola, ¿tienes instalado la biblioteca OpenSSL?, el instalador lo puedes bajar de aquí http://www.slproweb.com/products/Win32OpenSSL.html, o las Dll de donde te ha indicacado Román.

Saluditos

lduron
23-03-2009, 17:43:41
Hola Caro y Roman!

Voy a hacer algunas pruebas bajando los SSL de donde me dijo Caro y voy a probar el ejemplo que me pasaste Roman.

Muchas gracias a ambos y les digo màs adelante el resultado de las pruebas que hice.

Saludos!

lduron
24-03-2009, 04:40:21
Hola amigos del foro!

Hola Caro y Roman!

Ya instale los SSL y para asegurarme aparte de instalarlo, dentro del proyecto coloque los archivos:

libeay32.dll
libssl32.dll
ssleay32.dll

Además me marcaba otro error, el cual yo intuí y se lo quite haciendo lo siguiente:

En la propiedad IOHandler del IdSMTP le puse IdSSLIOHandlerSocketOpenSSL1

Y con esto ya no me marco ningún error al compilarlo, pero al momento de ejecutarlo...se queda sin hacer nada y con el mensaje: Resolving Hostname

Me pueden hacer el favor de decirme a que se debe esto? y como lo puedo corregir?

Muchas Gracias!

Saludos!

P.D. Todo lo he hecho con código (tiempo de ejecución), solo lo que les puse arriba lo he hecho en tiempo de diseño.

lduron
24-03-2009, 04:46:10
Perdón se me olvidaba que lo anterior lo hace con el puerto=465 y cuando le pongo el puerto=587 me marca:

raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library'

Saludos!

Caro
24-03-2009, 13:59:26
Ya instale los SSL y para asegurarme aparte de instalarlo, dentro del proyecto coloque los archivos:

libeay32.dll
libssl32.dll
ssleay32.dll


Hola de nuevo, si instalaste, no es necesario que pongas en el proyecto ya que al instalarlo ya te lo pone en las variables de entorno.

Además me marcaba otro error, el cual yo intuí y se lo quite haciendo lo siguiente:

En la propiedad IOHandler del IdSMTP le puse IdSSLIOHandlerSocketOpenSSL1

Y con esto ya no me marco ningún error al compilarlo, pero al momento de ejecutarlo...se queda sin hacer nada y con el mensaje: Resolving Hostname

P.D. Todo lo he hecho con código (tiempo de ejecución), solo lo que les puse arriba lo he hecho en tiempo de diseño.

Si, tu IdSMTP tiena que estar enlazado a tu IdSSLIOHandlerSocketOpenSSL, ¿has ejecutado el programa de Roman tal cual esta, porque debería funcionarte? si tu te has creado otro proyecto donde estas haciendo tus pruebas, puedes subirlo aquí para que veamos en que te estas equivocando.

Perdón se me olvidaba que lo anterior lo hace con el puerto=465 y cuando le pongo el puerto=587 me marca:

raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library'

Debería funcionarte tanto con el puerto 465 y 587 teniendo la propiedad UseTLS a utUseImplicitTLS y si utilizas el puerto 25 utUseExplicitTLS, para mi que debes quitar las dll que has puesto en el proyecto, como te dije ya te lo pone en las variables de entorno al instalarlo.

Saluditos

DarkBlue
22-11-2011, 04:37:56
para aquellos que tienen el problema de las dll (en especifico este mensaje raised exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library') y que no carga el protocolo sll agregen esto , yo solucione asi mi problema
porcierto uso el indy vercion 10.0.52

procedure TForm1.FormCreate(Sender: TObject);
begin
IdSSLOpenSSLHeaders.Load;
end;

Luego añade IdSSLOpenSSLHeaders al uses.

vean este link http://www.clubdelphi.com/foros/showthread.php?t=65422

Enan0
23-11-2011, 00:19:31
Te Recomiendo que las DLL las pongas en la carpeta del ejecutable.

y no es necesario que utilices el

IdSSLOpenSSLHeaders.Load;


Si esta creado y asignaste el tipo de conexion a utilizar alcanza
una vez que lo create

IdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.create(nil);
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method:=sslvTLSv1;
IDsmtp.IOHandler:=ssl;
IDsmtp.UseTLS:=utUseImplicitTLS;


Con esto bastaria