Enviar email desde Lazarus smtp indy


 

 

Cómo enviar emails desde [Lazarus] con Indy 10.

 

Incluimos las unidades necesarias para el proyecto.

En este caso las unidades imprescindibles para que funcione el envío de email usando TSL son:

IdSMTP

IdMessage

IdAttachmentFile

IdIOHandler

IdIOHandlerStack

IdSSL

IdSSLOpenSSL

IdExplicitTLSClientServerBase

La unidad quedaría así:

uses
Classes, SysUtils,Windows,DBGrids,Graphics,ZAbstractRODataset,ZDataset,DB,WinSock,
IdSMTP,IdMessage,IdAttachmentFile, IdIOHandler, IdIOHandlerStack, IdSSL,IdSSLOpenSSL,
IdExplicitTLSClientServerBase;

 

Creando el procedimiento para enviar los correos electrónicos.

procedure EnviarMensaje( sUsuario, sClave, sHost, sAdjunto, sAsunto, sDestino, sMensaje,sRemitente: String; sPuerto:integer );
var
   SMTP: TIdSMTP;
   Mensaje: TIdMessage;
   Adjunto: TIdAttachmentFile;
   IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
begin
  // Creamos el componente de conexión con el servidor
  IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create( nil );
  IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
  IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
 
  // Configuración de servidor SMTP (TIdSMTP)
  SMTP := TIdSMTP.Create( nil );
  SMTP.IOHandler := IdSSLIOHandlerSocket;
  SMTP.UseTLS := utUseImplicitTLS;
  SMTP.Username := sUsuario;
  SMTP.Password := sClave;
  SMTP.Host := sHost;
  SMTP.Port := sPuerto;
  SMTP.AuthType:=satDefault;
  SMTP.ReadTimeout:=10000;
 
  // Creamos el contenido del mensaje
  Mensaje := TIdMessage.Create( nil );
  Mensaje.Clear;
  Mensaje.From.Name := sRemitente;
  Mensaje.From.Address := sRemitente;
  Mensaje.Subject := sAsunto;
  Mensaje.Body.Text:=sMensaje;
  Mensaje.Recipients.Add;
  Mensaje.Recipients.EMailAddresses := 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
    SMTP.Connect;
    SMTP.Authenticate;
  except
  on E:Exception do
    raise Exception.Create( 'Error al conectar con el servidor. ' + E.Message);
  end;
 
  // Si ha conectado enviamos el mensaje y desconectamos
  if SMTP.Connected then
  begin
    try
      SMTP.Send( Mensaje );
    except
    on E:Exception do
      raise Exception.Create( 'Error al enviar el mensaje.' + E.Message );
    end;
 
    try
      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( SMTP );
  FreeAndNil( IdSSLIOHandlerSocket ); 
 
end;

Configuramos la pantalla principal de la empresa con los datos SMTP.

Solucionando el error “Could not load SSL library.”

Descargar las librerías desde aquí SSL indy

Elige la descarga según tu sistema operativo y descomprime el fichero que acabas de descargar.

Copia estos dos archivos libeay32.dll y ssleay32.dll en la carpeta de tu aplicación, donde se encuentra el ejecutable.

Espero que te sirva de ayuda.