[firebase-br] Delphi 7 + Indy 10 + SSL SAS

Julio F. Figueiredo tuskinhu em gmail.com
Seg Abr 7 15:07:52 -03 2014


Minha rotina do envio. A parte de criacao do body é igual.
Nao esquça:
Emails normais nao usam o TLS (GMail e Hotmail usam) faça uma conf no
cadastro do email
A porta do SMTP do gmail é 465 se nao me engano ao inves do 587 padrao
(idem com conf)
As variaveis q nao tem atribuicao no código ficam em public e sao setadas
antes de executar o metodo  de envio abaixo

Aqui um exemplo completo <http://dl.dropbox.com/u/93965867/EMailGMail.rar>,
adeque as suas necessidades.

procedure TdmMail.Enviar;
var
  A_IdSSLIOHandler : TIdSSLIOHandlerSocketOpenSSL;
begin

  {authentication settings}
  ProcessouEnvio := True;

  A_IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create();

  SMTP.Disconnect;

  {General setup}
  SMTP.Host := Host;
  SMTP.Port := PortaSMTP;
  SMTP.Username := ContaEmailFrom;
  SMTP.Password := SenhaContaEmail;

  if Autenticar then
    SMTP.AuthType  := satDefault
  else
    SMTP.AuthType  := satNone;  // Pela nova diretriz do nic.br nao existem
mais emails sem autenticação

  if UsarTLS then
    begin
      A_IdSSLIOHandler.SSLOptions.Method := sslvTLSv1;
      A_IdSSLIOHandler.SSLOptions.Mode   := sslmClient;
      SMTP.IOHandler                     := A_IdSSLIOHandler;
      SMTP.UseTLS                        := utUseImplicitTLS;
    end
  else
    begin
      SMTP.IOHandler := nil;
      SMTP.UseTLS    := utNoTLSSupport;
    end;

  if pos('hotmail', LowerCase(IdMsgSend.From.Address)) > 0 then
    begin
      A_IdSSLIOHandler.SSLOptions.Method := sslvTLSv1;
      A_IdSSLIOHandler.SSLOptions.Mode   := sslmClient;
      SMTP.IOHandler                     := A_IdSSLIOHandler;
      SMTP.UseTLS                        := utUseExplicitTLS;
    end;

   {now we send the message}
   try
     SMTP.Connect;
     Debug ('connect');
     try
        SMTP.Send(IdMsgSend);
        Debug ('send');
     finally
        SMTP.Disconnect;
        Debug ('desconectou');
     end;
   except
     on e:Exception do
       begin
         ProcessouEnvio := False;
         fMsg.ExibeMsg('Erro ao enviar a mensagem: ' + e.Message,msgerro);
       end;
   end;
end;


________________________________________
Att,
*Julio F. Figueiredo*
*Analista de Sistemas*


Em 7 de abril de 2014 08:55, Geferson Dietze <dgeferson em gmail.com> escreveu:

> Olá.
>
> Tenho programa que em determinadas situações envia e-mail de notificação
> para alguns endereços determinados.
>
> Agora precisei usar smtp do gmail e yahoo e não consigo de maneira alguma
> fazer funcionar.
>
> Criei um exemplo bem simples para teste e nem nele consigo enviar e-mail.
>
> Revirei fóruns, baixei N exemplo e nada funciona.
>
> Adicionei TidSMTP, TidSSLIOHandlerSocketOpenSSL, IDMessage e todos
> componentes da aba INDY SASL.
>
>
>   object IdSMTP1: TIdSMTP
>     IOHandler = IdSSL1
>     AuthType = satSASL
>     Host = 'smtp.gmail.com'
>     Password = minha senha
>     Port = 587
>     UseTLS = utUseRequireTLS
>     Username = 'dgeferson em gmail.com'
> E adicionei todos componentes da aba INDY SASL na
> propriedade SASLMechanisms.
>
>
>   object IdSSL1: TIdSSLIOHandlerSocketOpenSSL
>     Destination = 'smtp.gmail.com:587'
>     Host = 'smtp.gmail.com'
>     MaxLineAction = maException
>     Port = 587
>     DefaultPort = 0
>     SSLOptions.Method = sslvSSLv3
>     SSLOptions.SSLVersions = [sslvSSLv3]
>     SSLOptions.Mode = sslmClient
>
> *Lembrando que já mudei porta, SSLOptions.Method, UseTLS infinitas vezes.
>
>
> object IdMessage1: TIdMessage
>     AttachmentEncoding = 'UUE'
>     BccList = <>
>     CCList = <>
>     Encoding = meDefault
>     FromList = <
>       item
>         Address = 'dgeferson em gmail.com'
>         Text = 'dgeferson em gmail.com'
>         Domain = 'gmail.com'
>         User = 'dgeferson'
>       end>
>     From.Address = 'dgeferson em gmail.com'
>     From.Text = 'dgeferson em gmail.com'
>     From.Domain = 'gmail.com'
>     From.User = 'dgeferson'
>     ReceiptRecipient.Address = 'geferson.dietze em yahoo.com.br'
>     ReceiptRecipient.Text = 'geferson.dietze em yahoo.com.br'
>     ReceiptRecipient.Domain = 'yahoo.com.br'
>     ReceiptRecipient.User = 'geferson.dietze'
>     Recipients = <>
>     ReplyTo = <>
>     ConvertPreamble = True
>
>
> Baixei as DLL´s atualizadas, baixei antigas, testei de tudo e nada de
> funcionar. Tinha um programa antigo que utilizava gmail q funcionava à
> muitos anos q não funciona mais.
>
> Conecta tranquilo, mas na hora de enviar (dependendo das config´s)ou trava
> ou dá erro "Project project1.exe raised exception class EidSMTPReplyError
> with message 'RCPT first.44sm10758854yhp.17 - gsmtp"
>
> Primeiros erros foram de que faltava adicionar mecanismos de sas na
> propriedade SASLMechanisms, depois conectava e travava na hora do envio e
> agora isso, já estou ficando sem saber mais oq testar, pensando inclusive
> em fazer downgrade do indy.
> Alguém está conseguindo usar INDY10 para enviar e-mails?
>
> Obrigado.
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista