linuz
11-08-2013, 22:17:45
Buenas a todos,
sé que aquí se habla de Delphi, pero como existe tanta similitud con lázarus pues a ver si alguien puede ayudarme.
Llevo una semana intentando mandar emails con los componentes de Indy 10, el caso es que con un correo con cifrado SSL de pago me manda los emails, pero al pasarle los datos de gmail me da un error al enviar. El error es con STARTTLS, que no se puede iniciar. Tengo las dll's en la carpeta del ejecutable. He cambiado 20 mil cosas, he buscado por el foro, me he bajado el ejemplo de Roman de como enviar emails, y no hay forma.
Gracias de antemano.
Un saludo.
Os dejo el código de la función:
procedure EnviarMensaje( sUsuario, sClave, sHost, sAdjunto, sAsunto, sDestino, sMensaje: String );
var
Mensaje: TIdMessage;
Adjunto: TIdAttachmentfile;
begin
// Creamos el componente de conexión con el servidor
with F1 do
begin
SMTP := TIdSMTP.Create( nil );
SMTP.Username := sUsuario;
SMTP.Password := sClave;
SMTP.Host := sHost;
SMTP.Port := 587;
//SMTP.UseTLS:= 'utNoTLSSupport' ;
IdSSLOpenSSLHeaders.Load;
IdSSLIOHandlerSocketOpenSSL1.Destination := 'smtp.gmail.com:587';
IdSSLIOHandlerSocketOpenSSL1.host := 'smtp.gmail.com';
IdSSLIOHandlerSocketOpenSSL1.port := 587;
IdSSLIOHandlerSocketOpenSSL1.ssloptions.method := sslvSSLv3;
IdSSLIOHandlerSocketOpenSSL1.ssloptions.mode := sslmUnassigned;
end;
// SMTP.IOHandler := f1.IdSSLIOHandlerSocketOpenSSL1;
// SMTP.AuthType:= atDefault;
// Creamos el contenido del mensaje
Mensaje := TIdMessage.Create( nil );
Mensaje.Clear;
Mensaje.From.Name := sDestino;
Mensaje.From.Address := sDestino;
Mensaje.Subject := sAsunto;
Mensaje.Body.Text := sMensaje;
Mensaje.Recipients.Add;
Mensaje.Recipients.Items[0].Address := sDestino;
// Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
if sAdjunto <> '' then
begin
if FileExists( sAdjunto ) then
Adjunto := TIdAttachmentfile.Create( Mensaje.MessageParts,sAdjunto );
end
else
Adjunto := nil;
// Conectamos con el servidor SMTP
try
if f1.SMTP.Connected then
f1.SMTP.Disconnect;
f1.SMTP.Connect;
except
raise Exception.Create( 'Error al conectar con el servidor.' );
end;
// Si ha conectado enviamos el mensaje y desconectamos
if f1.SMTP.Connected then
begin
try
f1.SMTP.Send( Mensaje );
except
raise Exception.Create( 'Error al enviar el mensaje.' );
end;
try
f1.SMTP.Disconnect;
except
raise Exception.Create( 'Error al desconectar del servidor.' );
end;
end;
// Liberamos los objetos creados
if Adjunto <> nil then
FreeAndNil( Adjunto );
FreeAndNil( Mensaje );
FreeAndNil( f1.SMTP );
end;
sé que aquí se habla de Delphi, pero como existe tanta similitud con lázarus pues a ver si alguien puede ayudarme.
Llevo una semana intentando mandar emails con los componentes de Indy 10, el caso es que con un correo con cifrado SSL de pago me manda los emails, pero al pasarle los datos de gmail me da un error al enviar. El error es con STARTTLS, que no se puede iniciar. Tengo las dll's en la carpeta del ejecutable. He cambiado 20 mil cosas, he buscado por el foro, me he bajado el ejemplo de Roman de como enviar emails, y no hay forma.
Gracias de antemano.
Un saludo.
Os dejo el código de la función:
procedure EnviarMensaje( sUsuario, sClave, sHost, sAdjunto, sAsunto, sDestino, sMensaje: String );
var
Mensaje: TIdMessage;
Adjunto: TIdAttachmentfile;
begin
// Creamos el componente de conexión con el servidor
with F1 do
begin
SMTP := TIdSMTP.Create( nil );
SMTP.Username := sUsuario;
SMTP.Password := sClave;
SMTP.Host := sHost;
SMTP.Port := 587;
//SMTP.UseTLS:= 'utNoTLSSupport' ;
IdSSLOpenSSLHeaders.Load;
IdSSLIOHandlerSocketOpenSSL1.Destination := 'smtp.gmail.com:587';
IdSSLIOHandlerSocketOpenSSL1.host := 'smtp.gmail.com';
IdSSLIOHandlerSocketOpenSSL1.port := 587;
IdSSLIOHandlerSocketOpenSSL1.ssloptions.method := sslvSSLv3;
IdSSLIOHandlerSocketOpenSSL1.ssloptions.mode := sslmUnassigned;
end;
// SMTP.IOHandler := f1.IdSSLIOHandlerSocketOpenSSL1;
// SMTP.AuthType:= atDefault;
// Creamos el contenido del mensaje
Mensaje := TIdMessage.Create( nil );
Mensaje.Clear;
Mensaje.From.Name := sDestino;
Mensaje.From.Address := sDestino;
Mensaje.Subject := sAsunto;
Mensaje.Body.Text := sMensaje;
Mensaje.Recipients.Add;
Mensaje.Recipients.Items[0].Address := sDestino;
// Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
if sAdjunto <> '' then
begin
if FileExists( sAdjunto ) then
Adjunto := TIdAttachmentfile.Create( Mensaje.MessageParts,sAdjunto );
end
else
Adjunto := nil;
// Conectamos con el servidor SMTP
try
if f1.SMTP.Connected then
f1.SMTP.Disconnect;
f1.SMTP.Connect;
except
raise Exception.Create( 'Error al conectar con el servidor.' );
end;
// Si ha conectado enviamos el mensaje y desconectamos
if f1.SMTP.Connected then
begin
try
f1.SMTP.Send( Mensaje );
except
raise Exception.Create( 'Error al enviar el mensaje.' );
end;
try
f1.SMTP.Disconnect;
except
raise Exception.Create( 'Error al desconectar del servidor.' );
end;
end;
// Liberamos los objetos creados
if Adjunto <> nil then
FreeAndNil( Adjunto );
FreeAndNil( Mensaje );
FreeAndNil( f1.SMTP );
end;