Función para enviar un email - Delphi

On miércoles, 8 de diciembre de 2010 1 comentarios

Función para enviar un email - Delphi
Lenguaje de programación Borland Delphi

Con esta unidad realizada con Delphi 6 podremos enviar un email a uno o varios destinatarios. Permite la utilización de servidores de email que requieren autenticación para el envío. Para utilizarla añada una unidad a su proyecto, desde el menú "File" - "New" - "Unit" y copie el siguiente código en la unidad creada:
unit UnidadProcedimientos;

interface

uses IdHTTP, Classes, SysUtils, IdSMTP, IdMessage, windows;

function ConectarServidorEmail (servidor : string; usuario : string; puerto : integer) : boolean;
function enviarEmail (servidor : string; usuario : string; contrasena : string;
    puerto : integer; asunto : string; mensaje : TStringList; conAutenticacion : boolean;
    emisor : string; nombreEmisor : string; destinatario : string; cc : string) : boolean;

implementation

var
  compEnvioEmail : TIdSMTP;


//Función para conectar con el servidor de email
function ConectarServidorEmail (servidor : string; usuario : string; puerto : integer) : boolean;
begin
  compEnvioEmail := TIdSMTP.Create(nil);
  compEnvioEmail.host := servidor;
  compEnvioEmail.userid := usuario;
  compEnvioEmail.Port := puerto;
  try
    compEnvioEmail.connect;
  except
    compEnvioEmail.Free;
    ConectarServidorEmail := false;
  end;
end;

//enviar email
function enviarEmail (servidor : string; usuario : string; contrasena : string;
    puerto : integer; asunto : string; mensaje : TStringList; conAutenticacion : boolean;
    emisor : string; nombreEmisor : string; destinatario : string; cc : string) : boolean;
var
  compMensaje : TIdMessage;
  textoTemp : string;
  tipoAutenticacion : TAuthenticationType;
  envioCorrecto : boolean;
begin
  if conAutenticacion then
  begin
    compEnvioEmail.AuthenticationType := atLogin;
    compEnvioEmail.UserId := usuario;
    compEnvioEmail.Password := contrasena;
  end
  else
    compEnvioEmail.AuthenticationType := atNone;
  compMensaje := TIdMessage.Create (nil);
  compMensaje.From.Address := emisor;
  compMensaje.From.Name := nombreEmisor;
  compMensaje.Recipients.Add.Address := destinatario;
  compMensaje.CCList.Add.Address := cc;
  compMensaje.Body.AddStrings (mensaje);
  compMensaje.Subject := asunto;
  compMensaje.ReplyTo.Add.Address := emisor;
  envioCorrecto := true;
  try
    compEnvioEmail.Send(compMensaje);
  except
    envioCorrecto := false;
  end;
  compMensaje.Free;
  enviarEmail := envioCorrecto;
end;

end.
Un ejemplo de utilización:
...
  vtMensajeTexto := TStringList.Create;
  vtMensajeTexto.Add('Cuerpo del mensaje.');
  vtMensajeTexto.Add('');
  vtMensajeTexto.Add('');
  vtMensajeTexto.Add('');
  vtMensajeTexto.Add('Por AjpdSoft');
  if ConectarServidorEmail ('mail.servidor.com', 'usuario@ajpdsoft.com', 25) then
  begin
    if enviarEmail('mail.servidor.com', 'usuario@ajpdsoft.com', 'contraseña', 25,
        'El asunto del email', vtmensajeTexto, true, 'emaildelemisor@ajpdsoft.com', 
        'Nombre del emisor', 'destinatario@ajpdsoft.com, copiacarbon@ajpdsoft.com) then
      showmessage ('Mensaje enviado correctamente.')
    else
      showmessage ('El mensaje no se ha enviado.');
  end
  else
      showmessage ('No se ha podido conectar con el servidor de email.');
...

1 comentarios:

Anónimo dijo...

ya lo implemente pero me marca el mismo error que cuando lo hago directo con los componentes tidsmtp

el error es el siguiente

'Connection close Gracefully'

como se puede solucionar esto

Publicar un comentario