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:

Adicione os componentes:

Configure e renomeie as propriedades como a Figura 1 mostra.

Figura 1. Organização da tela

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;
Listagem 1. Evento OnClick do botão enviar
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin IdSMTP1.Disconnect; end;
Listagem 2. Evento OnClose do form
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin cancelar:= (key = #27); end;
Listagem 3. Evento OnKeyPress do form
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;
Listagem 4. Evento OmKeyDown do listbox
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;
Listagem 5. Evento OnClick do botão anexo
procedure TForm1.mnuDeletarAnexoSelecionadoClick(Sender: TObject); begin if ListBoxAnexos.ItemIndex <> -1 then ListBoxAnexos.DeleteSelected; end;
Listagem 6. Evento OnClick do popMenu Deletar anexo selecionado
procedure TForm1.DeletarTodososAnexos1Click(Sender: TObject); begin ListBoxAnexos.Clear; end;
Listagem 7. Evento OnClick do popMenu Deletar todos anexos selecionados
procedure TForm1.IdSMTP1Connected(Sender: TObject); begin StatusBar1.Panels[0].Text:= 'Conectado'; end;
Listagem 8. Evento OnConnected do IdSmtp
procedure TForm1.IdSMTP1Disconnected(Sender: TObject); begin StatusBar1.Panels[1].Text:= 'Desconectado'; end;
Listagem 9. Evento OnDisconnected do IdSmtp
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;
Listagem 10. Evento Onclick do BitBtn1
procedure TForm1.Image1Click(Sender: TObject); begin {declare   " ShellAPI "  na user} ShellExecute(handle,''open'',''www.websitebauru.vai.la'',nil,nil, SW_SHOWMAXIMIZED) end;
Listagem 11. Evento OnClick da Image1
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;
Listagem 12. Evento OnCreate do form
procedure TForm1.Button1Click(Sender: TObject); begin Close; end;
Listagem 13. Evento OnCclik do Button fechar

Com esses códigos você conseguirá enviar email para todo tipo de email, como Gmail, Hotmail, Yahoo entre outros.

Artigos relacionados