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:
.dfm:
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:
Podéis encontrar la aplicación en el siguiente enlace : Thundax Mail Sender.
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"
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.
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"
ReplyDeletelo mismo para IDSSLIOHAndlerSocketOpenSSL1
Hola Antonio,
ReplyDeleteQue versión del Indy estás utilizando?
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
ReplyDeletegracias saludos!
Hola Antonio,
ReplyDeletehas 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
Hola, sabes si funciona para indy 10 con delphi tokio? o requeriría algún cambio?
ReplyDelete