En el truco de hoy os voy a enseñar como podéis enviar correos electrónicos desde vuestra aplicación Delphi mediante vuestra cuenta Gmail.
Para ello vamos a hacer uso de los componentes Indy disponibles en cualquier versión de RAD Studio (en el truco se utiliza la versión XE8 pero está testeado en XE5 también).
Vamos a crearnos una función SendGMail con el siguiente código:
procedure SendGmail(pUsuario, pPassword, pAsunto, pCuerpo, pDestino : string);
var
Smtp : TidSMTP;
ManejadorSSL : TidSSLIOHandlerSocketOpenSSL;
Mensaje: TIdMessage;
begin
ManejadorSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
with ManejadorSSL do
begin
Destination := 'smtp.gmail.com:587';
Host := 'smtp.gmail.com';
MaxLineAction := maException;
Port := 587;
SSLOptions.Method := sslvTLSv1;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSlOptions.VerifyDepth := 0;
end;
Smtp := TIdSMTP.Create( nil );
with Smtp do
begin
IoHandler := ManejadorSSL;
Host := 'smtp.gmail.com';
Port := 25;
Username := pUsuario;
Password := pPassword;
UseTLS := utUseExplicitTLS;
end;
Mensaje := TIdMessage.Create(nil);
with Mensaje do
begin
Clear;
Subject := pAsunto;
Body.Text := pCuerpo;
Recipients.Add;
Recipients.Items[0].Address := pDestino;
end;
Smtp.Connect;
if smtp.Connected then
begin
smtp.Send(Mensaje);
smtp.Disconnect;
end;
FreeAndNil(Smtp);
FreeAndNil(Mensaje);
FreeAndNil(ManejadorSSL);
end;
Y ya está, solamente tendremos que llamar a esta función con los parámetros relativos a nuestra cuenta para enviar nuestro correo.
En lugar de crear los objetos dinámicamente, podéis pegar objetos directamente desde la paleta de componentes en vuestro formulario y ahorraros el create; si lo hacéis dinámicamente no olvidéis incluir en el uses las referencias necesarias:
uses
[...] IdMessage, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
IdSMTP,IdAttachmentFile,IdGlobal;
Observaréis que falta la opción de adjuntar algún archivo, pero eso lo vamos a dejar para futuros trucos.
Si tienes cualquier duda o comentario recuerda que puedes exponerlo aquí o bien mediante nuestro twitter y facebook.