Envio de E-mail usando o componente indy usando SMTP Gmail
Veja neste artigo como enviar email utilizando SMTP do Gmail através dos componentes Indy no Delphi.
O Gmail utiliza um sistema de criptografia chamado SSL, e para podermos conectar nossa aplicação à ele necessitamos de duas DLLs especificas: libeay32.dll e ssleay32.dll. Elas podem ser encontradas junto ao download desse artigo.
Após baixa-las, descompacte-as no diretório C:\WINDOWS\System32.
Vamos ao programa: abra um novo projeto e salve-os:
- USendMail.pas
- SendMail.dpr
Adicione os componentes:
- Standard
- 1) PopMenu
- 1) ListBox
- 1) Memo
- 1) GroupBox
- 1) CheckBox
- 10) Label
- 9) Edit
- 1) Button
- indy Clients
- 1) IdSMTP
- indy Misc
- 1)IdMessage
- 1) IdAntiFreeze
- indy I/O Handles
- 1)IdISSLOHANDLERSocket
- Dialogs
- 1) OpenDialog
- Additional
- 2) BitBtn
- 1) SpeedButton
- Samples
- 1) Gauge
- Win32
- 1) StatusBar
Configure e renomeie as propriedades como a Figura 1 mostra.
- btnEnviar: TBitBtn;
- ScrollBox1: TScrollBox;
- pg1: TGauge;
- StatusBar1: TStatusBar;
- Label1: TLabel;
- EdtNum: TEdit;
- EdtAssunto: TEdit;
- Label2: TLabel;
- EdtOrigem: TEdit;
- Label3: TLabel;
- Label5: TLabel;
- mmoMsg: TMemo;
- Label6: TLabel;
- EdtSMTP: TEdit;
- Label7: TLabel;
- EdtUsuario: TEdit;
- Label8: TLabel;
- EdtSenha: TEdit;
- GroupBox1: TGroupBox;
- Label4: TLabel;
- Label9: TLabel;
- Label10: TLabel;
- EdtPara: TEdit;
- EdtCC: TEdit;
- EdtBCC: TEdit;
- CheckBox1: TCheckBox;
- ListBoxAnexos: TListBox;
- Label11: TLabel;
- btnAnexo: TSpeedButton;
- OpenDialog1: TOpenDialog;
- PopupMenu1: TPopupMenu;
- mnuDeletarAnexoSelecionado: TMenuItem;
- DeletarTodososAnexos1: TMenuItem;
- BitBtn3: TBitBtn;
- IdSMTP1: TIdSMTP;
- IdMessage1: TIdMessage;
- SSLSocket: TIdSSLIOHandlerSocket;
- Button1: TButton;
- IdAntiFreeze1: TIdAntiFreeze;
- Image1 : TImage;
Vamos ao código mostrado nas Listagens 1 a 13.
procedure TForm1.btnEnviarClick(Sender: TObject);
var
i: integer;
begin
try
cancelar:= false;
Screen.Cursor:= crHourGlass;
btnEnviar.Enabled:= false;
pg1.MaxValue := StrToInt(EdtNum.Text);
pg1.Progress := 0;
IdSMTP1.Host := EdtSMTP.Text;
IdSMTP1.Username:= EdtUsuario.Text;
IdSMTP1.Password := EdtSenha.Text;
if CheckBox1.Checked then
IdSMTP1.AuthenticationType:= atLogin
else IdSMTP1.AuthenticationType:= atNone;
IdMessage1.MessageParts.Clear;
if ListBoxAnexos.Items.Count > 0 then
begin
for i:= 0 to ListBoxAnexos.Items.Count - 1 do
TIdAttachment.Create(IdMessage1.MessageParts, ListBoxAnexos.Items[i]);
end;
IdMessage1.From.Address:= EdtOrigem.Text;
IdMessage1.Subject:= EdtAssunto.Text;
{podem tirar a linha abaixo se vcs quiserem}
IdMessage1.Body.Text := mmoMsg.Lines.Text;
IdMessage1.ContentType:='text/html';
{aqui eu coloquei codigo html e todos estão marcados com * }
IdMessage1.Body.Add('<*html><*body>');
IdMessage1.Body.Add('<*p><*a href="http://marcos.sytes.net/comprar/index.php">
<*img src="http://www.websitebauru.110mb.com/compra.gif"><*/a><*/p>');
IdMessage1.Body.Add('<*p><*hr><*/p><*br>'+mmoMsg.Text);
IdMessage1.Body.Add('<*/body><*/html>');
IdMessage1.Recipients.EMailAddresses := EdtPara.Text;
IdMessage1.BccList.EMailAddresses := EdtBCC.Text;
IdMessage1.CCList.EMailAddresses := EdtCC.Text;
if not IdSMTP1.Connected then
IdSMTP1.Connect();
for i:= 1 to pg1.MaxValue do
begin
IdSMTP1.Send(IdMessage1);
if cancelar and (Application.MessageBox('Deseja cancelar o processo?',
'Confirmação',mb_iconQuestion + mb_YesNo + mb_DefButton2) = mrYes) then
break;
cancelar:= false;
pg1.AddProgress(1);
Application.ProcessMessages;
end;
finally
IdSMTP1.Disconnect;
Screen.Cursor:= crDefault;
btnEnviar.Enabled:= true;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdSMTP1.Disconnect;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
cancelar:= (key = #27);
end;
procedure TForm1.ListBoxAnexosKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_insert then
btnAnexo.Click
else if key = vk_delete then
mnuDeletarAnexoSelecionado.Click;
end;
procedure TForm1.btnAnexoClick(Sender: TObject);
var i: integer;
begin
if OpenDialog1.Execute then
begin
for i:= 0 to OpenDialog1.Files.Count -1 do
if (ListBoxAnexos.Items.IndexOf(OpenDialog1.Files[i]) = -1) then
ListBoxAnexos.Items.Add(OpenDialog1.Files[i])
end;
end;
procedure TForm1.mnuDeletarAnexoSelecionadoClick(Sender: TObject);
begin
if ListBoxAnexos.ItemIndex <> -1 then
ListBoxAnexos.DeleteSelected;
end;
procedure TForm1.DeletarTodososAnexos1Click(Sender: TObject);
begin
ListBoxAnexos.Clear;
end;
procedure TForm1.IdSMTP1Connected(Sender: TObject);
begin
StatusBar1.Panels[0].Text:= 'Conectado';
end;
procedure TForm1.IdSMTP1Disconnected(Sender: TObject);
begin
StatusBar1.Panels[1].Text:= 'Desconectado';
end;
aprocedure TForm1.BitBtn1Click(Sender: TObject);
begin
Application.MessageBox(pchar('Sistema de Envio de E-Mails Completo'#13 +
'Utilizando Componentes Indy'#13#13 +
'atualizado por Marcos Pacheco'#13+
'Hacker Bauru'#13 +
'Site: www.websitebauru.vai.la'#13 +
'E-Mail: mgp.1978@hotmail.com'),'Sobre',mb_iconInformation);
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
{declare " ShellAPI " na user}
ShellExecute(handle,''open'',''www.websitebauru.vai.la'',nil,nil,
SW_SHOWMAXIMIZED)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with IdSMTP1 do
begin
AuthenticationType := atLogin;
Host := EdtSMTP.Text;
IOHandler := SSLSocket;
Password := EdtSenha.Text;
Port := 465;
Username := EdtUsuario.Text;
end;
SSLSocket.SSLOptions.Method := sslvSSLv2;
SSLSocket.SSLOptions.Mode := sslmClient;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
Com esses códigos você conseguirá enviar email para todo tipo de email, como Gmail, Hotmail, Yahoo entre outros.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo