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.



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