PDA

Ver la Versión Completa : Conectar al servidor smtp con componentes INDY


cincosoft
10-02-2011, 20:41:06
Hola,

Estoy intentando enviar correo desde una pantalla y al intentar la conexión me da el siguiente error:

...raised exception class EIdSocketError with message 'Socket Error # 11001 Host not found,', Process stopped.....

El código es el siguiente:


procedure TFRMListados.EnviarMensaje(sUsuario, sClave, SHost, sAdjunto,
sAsunto, sDestino, sMensaje: String; sPort : Integer);
var
smtp : TIdSMTP;
begin
//Creamos los componentes de conexión con el servidor
smtp := TIdSMTP.Create(nil);
smtp.Username := 'miusuario@gmail.com';
smtp.Password := 'miclave';
smtp.Host := 'smtp.gmail.com';
smtp.Port := 25;
smtp.AuthenticationType := atLogin;

smtp.Connect; -- Linea que da el error


También probé con el puerto 465.

Muchas gracias.

newtron
12-02-2011, 11:03:35
Por alguna extraña razón hay servidores de correos con las que la conexión falla y gmail es una de ellas, prueba con otro servidor de correo, yahoo por ejemplo.

Igual alguien sabe decirnos porque unos servidores conectan y otros no.

Saludos

Enan0
15-02-2011, 14:14:29
el problema con Gmail es:
1) que no utiliza el puerto 25
2) Utiliza SSL

Si verificas los Los hilos hay subido un ejemplo de como enviar y recibir correos utilizando INDY 10

Este es uno de ellos

Ejemplo (http://www.clubdelphi.com/foros/showthread.php?t=71834)

pacopenin
15-02-2011, 17:39:13
Hola.

Yo no uso Indy, sino synapse y el siguiente ejemplo a mi me funciona bien :


procedure MailSend(const sSmtpHost, sSmtpPort, sSmtpUser, sSmtpPasswd, sFrom, sTo, sFileName: AnsiString);
var
smtp: TSMTPSend;
begin
smtp := TSMTPSend.Create;
try
smtp.UserName := sSmtpUser;
smtp.Password := sSmtpPasswd;

smtp.TargetHost := sSmtpHost;
smtp.TargetPort := sSmtpPort;

smtp.AutoTLS := true;

if not smtp.Login() then
raise ESMTP.Create('SMTP ERROR: Login:' + smtp.EnhCodeString);

if not smtp.MailFrom(sFrom, Length(sFrom)) then
raise ESMTP.Create('SMTP ERROR: MailFrom:' + smtp.EnhCodeString);
if not smtp.MailTo(sTo) then
raise ESMTP.Create('SMTP ERROR: MailTo:' + smtp.EnhCodeString);
if not smtp.MailData(msg_lines) then
raise ESMTP.Create('SMTP ERROR: MailData:' + smtp.EnhCodeString);

if not smtp.Logout() then
raise ESMTP.Create('SMTP ERROR: Logout:' + smtp.EnhCodeString);
finally
smtp.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MailSend('smtp.gmail.com', '587', 'cuenta@gmail.com', 'password', 'cuenta.from@gmail.com', 'cooreoTo@correor.com', 'test.txt');
//
end;




Saludos,

newtron
15-02-2011, 17:52:31
el problema con Gmail es:
1) que no utiliza el puerto 25
2) Utiliza SSL

Si verificas los Los hilos hay subido un ejemplo de como enviar y recibir correos utilizando INDY 10

Este es uno de ellos

Ejemplo (http://www.clubdelphi.com/foros/showthread.php?t=71834)

Es una tontería pero al compilar el ejemplo que me indicas me da error en la linea:

IdIMAP41.AuthType :=iatUserPass;

qué hay que añadir al uses para que se trague iatUserPass ?

Gracias y un saludo