segunda-feira, 1 de setembro de 2014

(PARTE 2) Gerar PDF e enviá-lo por E-mail no Delphi 7: Enviar automaticamente por E-mail um PDF gerado pelo Delphi 7


Na parte 1 deste tutorial ((PARTE 1) Gerar PDF e enviá-lo por E-mail no Delphi 7: Gerar PDF a partir do Quick Report utilizando ExportQR), mostrei como gerar um documento PDF no Delphi 7 a partir de um relatório Quick Report, utilizando o componente ExportQR.

Nesta parte 2, mostro como enviar automaticamente por e-mail um PDF gerado pelo Delphi.

Enviando por e-mail automaticamente um PDF gerado a partir do Quick Report

Antes de iniciarmos o tutorial, é necessário que você baixe as DLLs
abaixo e as coloque na pasta "C:\Windows\System32":

Download Dlls E-mail Delphi

O tutorial se baseia numa continuação da 1ª parte, a qual termina
com um botão no qual o PDF é gerado em um local pré-determinado.
Antes de qualquer coisa, é necessário incluir na cláusula "Uses" a
palavra IdMessage. Após esses comandos da 1ª parte, é necessário
criar no cabeçalho do evento Click do botão as seguintes variáveis:


var
  cc, assunto, sDiretorioArquivo : String;
  IdMessage1 : TIdMessage;
  IdSMTP1 : TIdSMTP;
  mmMensagem : TMemo;

Agora volte ao fim do clique do BitBtn novamente e digite o seguinte:

Note que neste momento a variável sDiretorioArquivo recebe como texto
o diretório que foi digitado na última linha da 1ª parte do Tutorial. Uma
dica seria configurar esse diretório automaticamente, sendo assim o
usuário criaria o PDF e enviaria ao destinatário automaticamente:


  sDiretorioArquivo  := Edit1.Text;

Em seguida, preencha as configurações do cabeçalho, corpo e anexos
do e-mail:


  IdMessage1 := TIdMessage.Create(nil);  
  IdSMTP1 := TIdSMTP.Create(nil);

  //e-mail do Remetente
  IdMessage1.From.Address := 'teste@mail.com';

  //e-mail do Destinatário
  IdMessage1.Recipients.EMailAddresses := 'abc@mail.com';

  IdMessage1.Body.Clear;
  IdMessage1.Body.Add('Sr(a) Fulano(a).');
  IdMessage1.Body.Add('PDF anexado referente à (...)');
  IdMessage1.Body.Add('');
  IdMessage1.Body.Add('Pela atenção, obrigado.');

  IdMessage1.Subject := 'Empresa - Doc: (...) '; //Assunto
  IdMessage1.Body.Add('Corpo da mensagem');

  //Anexando o PDF criado na parte 1 deste tutorial
  TIdAttachment.Create(IdMessage1.MessageParts,
  TFileName(sDiretorioArquivo + '.pdf'));

E por fim configure o servidor de e-mails, que no caso utilizamos como
exemplo o Yahoo:


  //Configuração do IdSMTP
  //Configurações remente
  IdSMTP1.AuthenticationType  := atLogin;
  IdSMTP1.Host := 'smtp.mail.yahoo.com.br'; //Host
  IdSMTP1.Username := 'remetente@mail.com'; //Remetente
  IdSMTP1.Password := '123'; //Senha do Remetente
  IdSMTP1.Port := '25'; //Porta padrão do Yahoo
  IdSMTP1.Connect; //Estabelece a conexão
  IdSMTP1.Authenticate; //Realiza a autenticação

  try
    IdSMTP1.Send(IdMessage1); //Envia a mensagem

    Form1.Refresh;
    Form1.Refresh;

    ShowMessage('Envio realizado com sucesso');
  except
    on e:exception do
    begin
      Application.MessageBox(Pchar(e.Message),
      Pchar('Erro.'), mb_ok+mb_iconerror);

      end;
   end;

  IdSMTP1.Disconnect;
Agora basta rodar a aplicação, informar dados válidos do servidor de
e-mail do Remetente e usar a criatividade para solucionar o problema
de sua empresa.

Conclusões

Notamos neste artigo a facilidade de envio de e-mails com anexos em
PDF gerados pelo Delphi 7. Forte abraço e até o próximo tutorial.

--

6 comentários:

  1. Olá Renato, primeiramente obrigado pela postagem, muito boa iniciativa. Agora fui implementar seu código e esta gerando o seguinte erro class EldProtocolReplyErro with message '5.7.0 Must Issue a STARTTLS command first'." Sabe o que pode estar acontecendo?

    ResponderExcluir
    Respostas
    1. Bom dia Tiago. Obrigado pela observação, eu havia esquecido de colocar no post que para executar esse exemplo tens que baixar duas DLLs e colocá-las na pasta "C:\Windows\System32".

      Segue abaixo o link para download das mesmas:
      https://mega.co.nz/#!qAdzRAYa!iLm1Im-Y27z2DhhkjeqsD5l10l7ylQTqN5QkBDzyrRs

      Abraço!

      Excluir
  2. olá bom dia
    tive problemas com a variável IdSMTP1 : TIdSMTP;

    [Error] unitenviaremail.pas(37): Undeclared identifier: 'TIdSMTP'

    como corrigir ??

    ResponderExcluir
    Respostas
    1. Boa noite Rodrigo..

      No seu caso o erro é porque faltou declarar IdSMTP na cláusula "Uses".

      Abraço.

      Excluir
  3. Boa Tarde!
    Tentei baixar os DLL mas diz que o arquivo não esta mais disponivel, teria outro caminho?

    ResponderExcluir
    Respostas
    1. Obrigado pela dica amiga, link de download devidamente corrigido. Grato.

      https://mega.nz/#!OYlESIpI!733-_HRlPPS0qsYWI1o_BGNaG1N9x2jBPGLKW7a3Nr4

      Excluir