Analitcs

Pesquisar no conteúdo do blog.atlabs.com.br

quinta-feira, 31 de maio de 2012

DELPHI - Envio de E-Mail no Delphi (Indy 10) - Funciona com Servidor SSL

Reações: 



Site das DLL'S: https://indy.fulgan.com/SSL/

// ATLabs 07/02/2013
Uses
// Declarar na seção uses
 , IdBaseComponent, IdComponent // Units Genéricas do Indy
 , IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL // Objeto SSL
 , IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP // Objeto SMTP
 , IdMessage // Objeto de Mensagem
 , IdAttachmentFile // Objeto de Arquivos Anexos

// DLL'S para funcionamento da função: 
// http://www.atlabs.com.br/blog/download/DLL_SSL_INDY.rar
// OU DEMO + DLLS - Adicionado em 24-09-2012
// 
// http://www.atlabs.com.br/blog/download/DemoIndProject10_EnvioDeEmail_Mais_Dlls.rar
//--------------------------------------------


function EnviarEmail(aHost : String; aPort : Integer; aLogin, aSenha,aListaEmail, aAssunto, aCorpo : String; aAuth, aAuthSSL : Boolean) : Boolean;
var
 AuthSSL : TIdSSLIOHandlerSocketOpenSSL;
 IdSMTP    : TIdSMTP;
 IdMessage : TIdMessage;
Const
 ArqTeste = 'c:\teste.txt';
begin
  Result:= False;
  IdSMTP    := TIdSMTP.Create(nil);
  IdMessage := TIdMessage.Create(nil);
  try
    IdSMTP.Host     := aHost;
    IdSMTP.Port     := aPort;
    IdSMTP.AuthType := satDefault;
    IdSMTP.Username := aLogin;
    IdSMTP.Password := aSenha;
    if aAuthSSL then
    begin
      AuthSSL                   := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
      IdSMTP.IOHandler          := AuthSSL;
      IdSMTP.UseTLS             := utUseImplicitTLS;
      AuthSSL.SSLOptions.Method := sslvSSLv3;
      AuthSSL.SSLOptions.Mode   := sslmClient;
    end;
    if aAuth then
      IdSMTP.AuthType := satDefault
    else
      IdSMTP.AuthType := satNone; 
    try
    IdSMTP.Connect;
    IdMessage.From.Address               := aLogin;
    IdMessage.Recipients.EMailAddresses  := aListaEmail;
    IdMessage.Subject                    := aAssunto;
    IdMessage.Body.Text:=                'Data/Hora: ' + FormatDateTime('dd/MM/yyyy HH:mm:ss', Now) +
                                         #13#10#13#10 +
                                         aCorpo;
    IdMessage.Body.SaveToFile(ArqTeste);
    IdMessage.MessageParts.Clear; // Limpa os anexos da lista
    TIdAttachmentFile.Create(IdMessage.MessageParts, TFileName(ArqTeste)); // adiciona anexo na lista, pode ser utilizado com looping

    IdSMTP.Send(IdMessage);
    ShowMessage('E-Mail Enviado com sucesso para: ' +  aListaEmail);
    except
      on E: Exception do
      begin
        ShowMessage('Erro ao enviar E-Mail:'+#13#10+e.Message);
        Exit;
      end;
    end;
  finally
    IdSMTP.Disconnect;
    FreeAndNil(IdSMTP);
    FreeAndNil(IdMessage);
    if AuthSSL <> nil then
    FreeAndNil(AuthSSL);
  end;
  Result:= True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnviarEmail('smtp.gmail.com', 465, 'conta@gmail.com','senha','destinatario@gmail.com','Envio de email','CORPO DA MENSAGEM', True, True);
end;

/*TESTADO EM 14-06-2012*/
//----------------------

//Andre Santos 6 de junho de 2014 19:33//Fiz o teste com o Gmail e está OK.

//Para funcionar com o HOTMAIL vc tem q mudar a seguinte linha: 

//DE:

//IdSMTP.UseTLS := utUseImplicitTLS;

//PARA:
IdSMTP.UseTLS := utUseExplicitTLS;

//Para a mudança ficar automática eu acrescentei ao código, da //seguinte forma:

if (copy(aLogin,pos('@',aLogin),Length(aLogin)) = '@hotmail.com') then
  IdSMTP.UseTLS := utUseExplicitTLS
else
  IdSMTP.UseTLS := utUseImplicitTLS; 

//Lembrando que o HOTMAIL utiliza as seguintes configurações:

//Servidor SMTP: smtp.live.com

//Porta: 25

//Autenticação: True 

//SSL: True 

//Teste realizado: 06/06/2014 - Funcionando 

//Utilizo os componentes INDY do DELPHI XE 5 - Andre Santos 6 de junho de 2014 19:33

// E Caso precisem  

Validação de endereço de email

http://blog.atlabs.com.br/2012/06/validacao-de-endereco-de-e-mail.html  

46 comentários:

  1. vo testar aqui, tava procurando muito essas funçoes vi no site planeta delphi mais nao entendi nada;x vo testa dps posto se consegui

    ResponderExcluir
  2. a velho nao consegui aqui nao. posta imagens do componentes pelo menos se poder =), preciso saber como envia email urgente ;x

    ResponderExcluir
  3. Não tem componente visual, e precisa estar com os componentes do Indy Atualizados (http://www.indyproject.org/Sockets/wizard/DownloadWizard.EN.aspx)

    Fiz um demo:

    http://www.atlabs.com.br/blog/download/DemoEmailSSL.rar

    ResponderExcluir
  4. hmm é q continua dando erro na uses ;s falando q nao acha 1 arquivo aqui
    ldlOHandlerStack.dcu
    foda =( qual é o indy atualizado o 9 ne...

    ResponderExcluir
  5. O 9 é a versão estável, porém nas versões novas do Delphi (2010, XE, XE2) acredito que já venha com o 10.

    Testei este fonte com a versão 10

    ResponderExcluir
  6. entao eu axei q instalei errado o indy to vendo aqui indy10 tem como por no d7 vamo ve se vai da liga ;x

    ResponderExcluir
  7. Conselhão: Tenta instalar o Delphi XE, programar em plataforma antiga só gera problemas...

    ResponderExcluir
  8. aff nao conseguir =( foda da nada ;/ vlw por td

    ResponderExcluir
  9. é mais é oq o meu curso ta oferecendoe eu to fazendo curso em uma instituiçao federal ;/

    ResponderExcluir
  10. Acessa ai: http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

    São as instruções de instalação do Indy 10.

    Traduzido:

    http://translate.google.com.br/translate?sl=pt&tl=en&js=n&prev=_t&hl=pt-BR&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fwww.indyproject.org%2FSockets%2FDocs%2FIndy10Installation.EN.aspx



    Tem q funcionar... DESISTIR NUNCA!!! HEHEHEH

    ResponderExcluir
  11. Siga os passos de "Delphi Compilation" para baixo

    ResponderExcluir
  12. vou tentar =)mais se der vc poderia fazer 1 video aula q é bem mais facil >.< abraço

    ResponderExcluir
  13. Já deve existir algo do tipo na internet.... infelizmente não tenho tempo para fazer uma video aula, caso quando vc conseguir queira faze-la, eu posto aqui no blog.

    ResponderExcluir
  14. Onde devem ser adicionadas as Dlls do indy para usar o SSL? agradeço desde já.

    ResponderExcluir
  15. Coloquei as Mesmas no System32 e o Software Continuou reclamando da falta das mesmas.

    ResponderExcluir
  16. Teria como descrever seu ambiente?

    Sistema operacional
    Versão do Delphi
    Versão do Indy

    ResponderExcluir
  17. Sistema Operacional Windows 7 Professional
    Embarcadero® Delphi® 2010 Version 14.0.3513.24210
    Indy 10

    ResponderExcluir
  18. baixa o demo, compila ai no seu delphi e testa...

    http://www.atlabs.com.br/blog/download/DemoIndProject10_EnvioDeEmail_Mais_Dlls.rar

    ResponderExcluir
  19. Fui no Help, Version info e Verifiquei o Indy, que achava estar na versão 10 e verifiquei que esta na Indycore140.bpl indicando a versão 14.xxx
    qual versao recomenda do Indy?

    ResponderExcluir
  20. Segue os links do distribuidor do Indy:

    http://www.indyproject.org/Sockets/index.EN.aspx
    Codumentation:
    http://www.indyproject.org/Sockets/Docs/index.EN.aspx
    Downloads
    http://www.indyproject.org/Sockets/wizard/DownloadWizard.EN.aspx

    Instruções de Instalação (Documentação em Inglês):
    http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

    Quanto a versão 140 quer dizer que é do delphi 10:

    Delphi 10 - Versao 140
    Delphi XE - Versao 150
    Delphi XE2 - Versao 160 - Minha versão


    Entendeu? 140 é a versão atual do Delphi, ai a bpl pega a versão do compilador, mas ela pode ser atribuida tb com o nome de IndyCore60 (Delphi 6 - Que também está instalado do meu PC).

    Nos links acima tem as instruções de como vc deve atualizar seu compilador.

    Abçs!

    ResponderExcluir
  21. Pelo que percebi estou com a Versão Correta das BPL´s do Indy. nos pacotes Indy...140.
    Vou tentar Recompilar as BPL e instalar os pacotes para verificar. Você já viu este Erro "Could Not Load SSL Library."

    ResponderExcluir
  22. Já, normalmente é dll q não está no diretório do executável. A Dll deve estar no mesmo diretório do application.exename;


    Outra coisa q eu já peguei, foi versão da dll diferente desta postada aqui, tb pode dar erro (pegar as dlls diretamente do site da indy, pois os componentes deles não estão compilados para versão das dlls mais novas)

    ResponderExcluir
  23. Vlw! Vou testar colocar a DLL no local que vc Indicou pois tinha colocado no SYSTEM32 do windows.

    ResponderExcluir
  24. é. seu demo tb não rodou. continuou com o erro de não encontrar as SSL Library. Bicho tah pegando rsrs

    ResponderExcluir
  25. Deve ser algo com o Indy então, segue aqueles links enviados, eu recompilei o demo agora de manha (24-09-2012) e estão ok.

    Mandei uma msg pra um email meu da conta do google e está ok.

    ResponderExcluir
  26. consegui Resolver e jah estou enviando e-mails, Mas todos estão indo para a Pasta de SPAM do gmail. tem alguma idéia do motivo?

    ResponderExcluir
  27. Teria que ver se seu email não foi bloqueado pelo assunto, ou pelo conteudo do texto, dependendo o que exista no email, ou se foi processado Flood de envio de mensagens, o robo de anti-spam do google acaba bloqueando sua mensagem.

    vc pode testar ou com uma nova conta, ou tentar explicações diretamenete com a pagina de ajuda do google.


    Poderia postar aqui o que vc fez para resolver seu problema (causa do problema e solução)?


    as vezes a solução do seu erro pode ajudar outro colega com dificuldades.


    Agradeço por acessar o blog.


    Atte.

    Felipe Leal

    ResponderExcluir
  28. Estava tendo dificuldades com o Procedimento de Recompilar e instalar o pacote do INDY novamente. Removi a minha aplicação do Delphi e Reinstalei, e acabou resolvendo o problema e o e-mail conseguiu ser enviado.

    ResponderExcluir
  29. ERRO: could not load ssl library indy...
    Usando W7 PRO
    Delphi 2010
    Usei o exemplo com as DLL, já atualizei as dlls para versão 1.0.1c e nada resolvido.
    Alguém sabe uma solução?
    ;)

    ResponderExcluir
    Respostas
    1. As DLL's devem estar no mesmo diretório que a aplicação, aconselho o uso das DLL's postadas, pois o grupo que desenvolve esses arquivos é diferente do pessoal que desenvolve o Indy.

      Estes testes foram efetuados com a versão 10 do Indy, caso esteja desatualizado os componentes, favor baixar a versão mais nova do site:


      http://www.indyproject.org/Sockets/index.EN.aspx
      Codumentation:
      http://www.indyproject.org/Sockets/Docs/index.EN.aspx
      Downloads
      http://www.indyproject.org/Sockets/wizard/DownloadWizard.EN.aspx

      Instruções de Instalação (Documentação em Inglês):
      http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

      Excluir
    2. Estava recebendo a mensagem de erro: "Could not load SSL library".

      Resolvi utilizando as DLLs (libeay32.dll, ssleay32.dll) que se encontra dentro do diretório do Delphi (C:\Program Files\Embarcadero\RAD Studio\12.0\bin\subversion). As do post não funcionou.


      Obs.: Minhas DLLs estava em tamanho maiores.

      Utilizo XE5.

      Excluir
  30. Este comentário foi removido pelo autor.

    ResponderExcluir
  31. Felipe, Nota 10, Funcionou perfeitamente no Delphi 2007. Parabéns e Obrigado.
    Silvio Cohen

    ResponderExcluir
  32. Olá amigo como fazer para enviar o email pelo Delphi 7, testei seu exemplo mas está dando erro File not Found IdIOHandlerStack, coloquei as Dlls no diretório da aplicação e também no System32. Obrigado. Ricardo.

    ResponderExcluir
    Respostas
    1. Instale o Indy 10, acima informo como.


      Abçs!

      Excluir
  33. Felipão, obrigado por compartilhar cara. Tá de parabéns! funciona perfeitamnte 100% :D!

    Vale lembrar que nos Windows que tiver as pastas C:\Windows\System32 e C:\Windows\SysWOW64 as dlls devem estar tanto na pasta do projeto quanto nessas pastas.

    ResponderExcluir
    Respostas
    1. Que bom q funcionou...

      Quanto as dlls basta coloca-las no diretório do aplicativo (faço deste jeito)

      Abçs!

      Siga e compartilhe..

      Excluir
  34. caros ele ta funcionando beleza só que só funciona pra G-Mail .. ..

    ResponderExcluir
    Respostas
    1. "Caro", caso consiga fazer funcionar no seu provedor, pode postar aqui em resposta, todos da internet agradecemos!

      Excluir
  35. Fiz o teste com o Gmail e está OK.

    Para funcionar com o HOTMAIL vc tem q mudar a seguinte linha:
    DE:
    IdSMTP.UseTLS := utUseImplicitTLS;

    PARA:
    IdSMTP.UseTLS := utUseExplicitTLS;

    Para a mudança ficar automática eu acrescentei ao código, da seguinte forma:

    if (copy(aLogin,pos('@',aLogin),Length(aLogin)) = '@hotmail.com') then
    IdSMTP.UseTLS := utUseExplicitTLS
    else
    IdSMTP.UseTLS := utUseImplicitTLS;


    Lembrando que o HOTMAIL utiliza as seguintes configurações:
    Servidor SMTP: smtp.live.com
    Porta: 25
    Autenticação: True
    SSL: True

    Teste realizado: 06/06/2014 - Funcionando

    Utilizo os componentes INDY do DELPHI XE 5

    ResponderExcluir
    Respostas
    1. Se não conseguir utilizando a porta 25, use a porta 587.

      Excluir
  36. Testado com Yahoo em 10/06/2014 - FUNCIONANDO
    Servidor SMTP: smtp.mail.yahoo.com.br
    Porta: 25
    Autenticação: True
    SSL: True

    ResponderExcluir
  37. E aí Felipe, beleza?
    Meus parabéns pelo post, ajuda muito!

    Só que eu tenho um dúvida: os e-mails enviados aparecem como spam no destinatário, nem entram na Caixa de Entrada, vai para o lixo eletrônico diretamente.

    O que pode ser? Abraços.

    ResponderExcluir
    Respostas
    1. Obrigado pelo parabéns.

      Quanto ao email ir para o lixo eletrônico, tente com outra conta, pode ser ela que está sendo identificada como lixo ou pelo provedor ou pelo gerenciador de mensagens ("Outlook")

      O Outlook também costuma mandar para lixo quando o remetente é o mesmo do destinatário, pois existem sites de mala direta que para não terem o problema acima citado com suas contas, eles configuram o envio de email para parecer que vc mandou uma mensagem para vc mesmo.

      Se for isso, posta uma resposta ai depois, pode ser que seu problema seja de mais colegas também.


      Abçs!

      Excluir

Observação: somente um membro deste blog pode postar um comentário.

Max Gehringer