[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