Delphi SMTP con Indy 10

El Protocolo Simple de Transferencia de Correo o SMTP es un protocolo de la capa de aplicaciĆ³n. Protocolo de red basado en texto utilizado para el intercambio de mensajes de correo electrĆ³nico entre computadoras u otros dispositivos (PDA's, telĆ©fonos mĆ³viles, etc.).

Mediante los componentes de Indy 10 (los que vienen con el Delphi 2009), podemos crear aplicaciones que utilizen este protocolo para enviar correos. En la siguiente aplicaciĆ³n que os muestro Thundax Mail Sender, utilizarĆ© estos componentes y enviarĆ© correos mediante gmail. Para mi ejemplo, utilizarĆ© los siguientes componentes:

Un componente SMTP, uno que gestiona el SSL y otro que es el que encapsula el mensaje IdMessage. Con esta aplicaciĆ³n, podrĆ© enviar correos en un formato sencillo, sin tener que entrar en mi cuenta de correo (ya lo harĆ” la aplicaciĆ³n), y lo mĆ”s interesante, puedo crear una lista de mailing para enviar correo masivo a toda una lista de contactos.


La configuraciĆ³n de los componentes es la siguiente:

.pas:


procedure TForm1.Button1Click(Sender: TObject);
begin
    IdSMTP1.Host := server.text;
    IdSMTP1.Password := password.Text;
    IDSMTP1.Port := StrToInt(port.Text);
    IdSMTP1.Username := from.Text;

    IdSSLIOHandlerSocketOpenSSL1.Destination :=  server.text + ':' + port.Text;
    IdSSLIOHandlerSocketOpenSSL1.Host := server.Text;
    IdSSLIOHandlerSocketOpenSSL1.Port := IDSMTP1.Port;

    IdSMTP1.Connect;
    IdMessage1.From.Address := from.text;
    IdMessage1.Recipients.EMailAddresses := EdTo.text;
    IdMessage1.Subject := Subject.text;
    IdMessage1.Body.Text := Message.text;
    IdSMTP1.Send(IdMessage1);
    IdSMTP1.Disconnect;
end;




.dfm:


  object IdSMTP1: TIdSMTP
OnStatus = IdSMTP1Status
IOHandler = IdSSLIOHandlerSocketOpenSSL1
Host = 'smtp.gmail.com'
    Password = 'mypassword'
    Port = 587
    SASLMechanisms = <>
    UseTLS = utUseExplicitTLS
Username = 'my@email.com'
    Left = 112
    Top = 304
  end
  object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
Destination = 'smtp.gmail.com:587'
    Host = 'smtp.gmail.com'
    MaxLineAction = maException
Port = 587
    DefaultPort = 0
    SSLOptions.Mode = sslmUnassigned
SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    OnStatusInfo = IdSSLIOHandlerSocketOpenSSL1StatusInfo
Left = 112
    Top = 352
  end
  object IdMessage1: TIdMessage
AttachmentEncoding = 'UUE'
    BccList = <>
    CCList = <>
    Encoding = meDefault
FromList = <
      item
end>
    Recipients = <>
    ReplyTo = <>
    ConvertPreamble = True
Left = 112
    Top = 256
  end




UtilizarƩ el servidor SMTP de gmail -> smtp.gmail.com y el puerto 587. Si lo queremos enviar con otro servidor, simplemente tenemos que buscar cuƔl es su servidor smtp y su puerto, por ejemplo para yahoo, me parece que tenemos que utilizar el smtp.mail.yahoo.com y el puerto 465. Otro de las pruebas hechas y con la ayuda de un compaƱero es sobre el servidor smtp de telefonica -> smtp.telefonica.net y el puerto 25. Pero al parecer no funciona con el nombre, y hay que entrar la IP directamente: 213.4.149.228 y el puerto 25.

Una vez tengamos los parĆ”metros entrados correctamente, la aplicaciĆ³n avisa del estado y muestra la conexiĆ³n SSL:

SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5;bits = 128;version =TLSv1/SSLv3;
SSL status: "SSL negotiation finished successfully"

PodĆ©is encontrar la aplicaciĆ³n en el siguiente enlace : Thundax Mail Sender.


Comments

  1. estimado amigo, ¿como obtengo los ssl status?. Ademas por que me dice el ide que el "IdSMTP1Status method referenced by IDSMTP!.OnStatus Does not exist"

    lo mismo para IDSSLIOHAndlerSocketOpenSSL1

    ReplyDelete
  2. Hola Antonio,

    Que versiĆ³n del Indy estĆ”s utilizando?

    ReplyDelete
  3. se supone que tengo delphi 7 e instale el indy 10 baje un zip no me acuerdo de que pagina y se llama asi el zip Indy10_4526.zip
    gracias saludos!

    ReplyDelete
  4. Hola Antonio,

    has conseguido compilar e instalar la versiĆ³n de Indy 10?, lo digo por que con Delphi 7 hay que compilar la versiĆ³n e instalarla. Luego te aparecerĆ”n los componentes en la paleta de componentes y los podrĆ”s agregar a tu programa

    ReplyDelete
  5. Hola, sabes si funciona para indy 10 con delphi tokio? o requerirĆ­a algĆŗn cambio?

    ReplyDelete

Post a Comment

Popular Posts