Código
Bem, depois de uma boa volta pela internet buscando sobre o assundo e não encontrando nenhum que realmente funcione,
segue abaixo dica para enviar email para servidores que usam SSL:
agora a parte legal, dentro do codigo fonte do Indy, ele é informado a versão da dll que funciona..
arquivo que tem o nome das dlls:
IdSSLOpenSSLHeaders.pas
um pouco + embaixo vc vai achar a seguinte linha:
// LIBEAY functions - open SSL 0.9.6a
Caso não seja do delphi 7 a sua versão de criação localize dentro dos arquivos do delphi as dlls e tente achar as respectivas versoes
tudo isso por causa do Erro:
"Could not load ssl library"
site:
Dll's para o delphi 7 - dlls mais antigas, para esta versão utilize a dll
Friday, December 13, 2002 6:21 PM 377878 "indy_openssl096.zip"
link: http://indy.fulgan.com/SSL/Archive/indy_openssl096.zip
http://indy.fulgan.com/SSL/Archive/
ou
http://indy.fulgan.com/SSL/
Incluir na clausula Uses:
}
WinInet, // para verificação de conexão
IdMessage, IdSMTP, // componemtes envio de email
IdBaseComponent, IdComponent, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL; // componentes SSL
// inicio - DELPHI7
// função para verificação de conectividade (não quer dizer que esteja na internet... para isto veja os retornos do site meuip.com.br na parte de dicas... fumfa bem se o endereço estiver liberado)
function IsConnected: Boolean;
const
INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;
var
dwConnectionTypes : DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
If InternetGetConnectedState(@dwConnectionTypes,0) then
Result := True
else
Result := False;
end;
// Função para enviar email, pode ser incluida direto em uma uses sem formulario para simplificar o fonte
function EnviaMail(Email, Conta, Senha, Autentica, Smtp, Auth_SSL, Nom_exibe, Porta_smtp, Corpo, Destinatario, Assunto : String) : Boolean;
var
Mensagem: TIdMessage;
cnxSMTP: TIdSMTP;
AuthSSL: TIdSSLIOHandlerSocket;
begin
Result := True;
// verifica se há conexão
if not IsConnected then
begin
Result := false;
Exit;
end;
try
Mensagem := TIdMessage.Create(nil); // crio os componemtes em tempo de execução
cnxSMTP := TIdSMTP.Create(nil);
{ OBS para não dar muita volta:
Auth_SSL = S
Auth_SSL = N
Autentica = S
Autentica = N
Para verificar se há necessidade de autenticação ou ssl}
if Auth_SSL = 'S' then
begin
AuthSSL := TIdSSLIOHandlerSocket.Create(nil);
cnxSMTP.IOHandler := AuthSSL;
AuthSSL.SSLOptions.Method := sslvSSLv2;
AuthSSL.SSLOptions.Mode := sslmClient;
end;
Mensagem.From.Name := 'REMETENTE'; // Nome do Remetente
Mensagem.From.Address := Email; // E-mail do Remetente = email valido...
Mensagem.Recipients.EMailAddresses := Destinatario; // destinatario
Mensagem.Priority := mpHighest;
Mensagem.Subject := Assunto; // Assunto do E-mail
cnxSMTP.Host := Smtp; // smtp terra}
cnxSMTP.Username := Conta;
cnxSMTP.Password := Senha;
if Autentica = 'S' then
cnxSMTP.AuthenticationType := atLogin;
if Autentica = 'N' then
cnxSMTP.AuthenticationType := atNone;
cnxSMTP.Port := StrToInt(Porta_smtp);
Mensagem.Body.Clear;
Mensagem.Body.Add(Corpo);
cnxSMTP.Connect;
Try
cnxSMTP.Send(Mensagem);
except
showmessage('Erro ao tentar enviar o email para ' + Destinatario + ' 1ª Tentativa');
cnxSMTP.Disconnect;
cnxSMTP.Host := Smtp; // smtp
cnxSMTP.AuthenticationType := atNone;
cnxSMTP.Connect;
try
cnxSMTP.Send(Mensagem);
except
begin
showmessage('Erro ao tentar enviar o email para ' + Destinatario + ' 2ª Tentativa');
Result := false;
showmessage('Não pode enviar o email para ' + Destinatario + #13#13 + 'Verifique as configurações da conta!');
end;
end;
cnxSMTP.Disconnect;
end;
cnxSMTP.Disconnect;
finally
Mensagem.free; // destruo se não ha uso
cnxSMTP.free;
if Auth_SSL = 'S' then // destruo o ssl se tiver autenticação
AuthSSL.Free;
end;
if Result then
showmessage('E-Mail teste enviado para ' + Destinatario);
end;
// fim
//Agora em um formulario coloque um botão e use a função envia email assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
EnviaMail('email@servidor.com.br', // Email
'conta', //Conta sem_arroba_ou_com_arroba_depende_do_servidor
'senha',// Senha
'S', // Autentica
'smtp.gmail.com', // Smtp
'S', // Auth_SSL
'Nome para exibição', // Nom_exibe
'Porta', // Porta_smtp - SEMPRE UM VALOR NUMERICO, mas com APOSTROFE '
'Corpo do email', // Corpo - Texto que vai na mensagem
'Destinatario(s)', // Destinatario, ex: eu@vc.com;teste@teste.com...
'Assunto'); // Assunto
end;
Atte. Felipe Leal
Delphi Developer
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009