Depois de alguma horas de pesquisa, devido, dificuldades no envio de e-mail usando uma conta do GMAIL e outras; tivemos que modificar o código para usar autenticação segura. Interessante que em algumas máquinas funcionava sem o serviço de autenticação (qdo descobrir o motivo eu digo, rsrsrs). Compartilho com vocês essas informações.

Alguns erros reportados durante as falhas de envio de e-mail foram: “Must issue a STARTTLS command first” (indicando que seria necessário TLS ou, autenticação de segurança) e depois de implentado o código abaixo sem baixar a OpenSSL na máquina “Could not load SSL library”.

Modificamos então, o código para permitir o envio de e-mails usando autenticação ou não. Usando autenticação, é necessário instalar a OpenSSL  e, declarar alguns units no seu código. Na web encontrei vários artigos sobre isso, mas, a maioria com informações incompletas, agradeço mesmo assim essas informações, pois me auxiliaram a entender o que precisaria fazer e, juntando as peças (copiando e colando) montei o código abaixo.

As ferramentas e recursos de desenvolvimento utilizadas são: Delphi 2010, Indy 10 (disp. no Delphi), OpenSSL e testado com uma conta do GMAIL.

Veja o código:

procedure TEnviaEmail.Execute;
var idSMTP1: TIdSMTP;
    idmessage1: TIdMessage;
    textomsg: TidText;
    IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  NameThreadForDebugging('EnviaEmail');
  erro := '';
 
  Synchronize(UpdateEmailEnviando);
  Try
    idSMTP1 := TIdSMTP.create(nil);
    idmessage1 := TIdMessage.create(nil);
 
    try
 
    // configura servidor SMTP
    idSMTP1.Host := host;     // smtp...
    idSMTP1.Username := username;
    idSMTP1.Password := password;
    idSMTP1.ConnectTimeout := 20000;
 
    // configurações adicionais servidor SMTP com autenticação
    if autenticacao then
    begin
      with idSMTP1 do
      begin
         IdSSL := nil;
         try
         port := 465;
         IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create( nil );
         IdSMTP1.IOHandler := IdSSL;
         UseTLS := utUseImplicitTLS;
         except on E: Exception do
            begin
              IOHandler := TIdIOHandler.MakeDefaultIOHandler( nil );
              UseTLS := utNoTLSSupport;
            end;
          end;
          if Assigned(IdSSL) then
          begin
            IdSSL.SSLOptions.Method := sslvSSLv3;
            IdSSL.SSLOptions.Mode := sslmClient;
          end;
          AuthType := satDefault;
      end;
 
    end;
 
    // configurando mensagem
    idmessage1.Clear;
    idmessage1.CharSet:='iso-8859-1';
    idmessage1.Encoding := MeMIME;
    idmessage1.ContentType:='multipart/related'   ;
    idmessage1.from.address := emailloja;  // e-mail do remetente
 
    // e-mail destinatario                                      |
    idmessage1.recipients.emailaddresses := emaildestinatario;
 
    // Assunto (titulo E-mail)
    idmessage1.subject := emailsubject;
 
    // Corpo da Mensagem (use aqui um HTML ou texto que deseja enviar
    // juntamente com a mensagem.
    textomsg := TIdText.Create(idmessage1.MessageParts);
    textomsg.Body.Text := 'Prezado Cliente,'+
    'Obrigado por comprar na nossa Empresa. Estamos encaminhando esse e-mail contendo'+
    ' ....';
    textomsg.ContentType := 'text/html';
 
    idSMTP1.Connect;
    if autenticacao then idSMTP1.Authenticate;
    idSMTP1.send(idmessage1);
    idSMTP1.Disconnect;
 
    Synchronize(UpdateEmailOK);
 
    except
       on e:exception do begin
       erro := e.message;
       Synchronize(UpdateEmailErro);
       end;
    end;
 
  Finally
    idmessage1.Free;
    if autenticacao then idSSL.Free;
    IdSMTP1.Free;
  End;
End;

Obs.: Não esqueça de declarar na uses: IdMessage, IdSMTP, IdMessageClient, IdExplicitTLSClientServerBase, IdSMTPBase, IdText, IdBaseComponent, IdComponent, IdSASL, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL;

Onde baixar e instalar a OpenSSL?

Para facilitar nossa vida, a Shinning Light Productions desenvolveu um instalador rápido e prático denominado Win32OpenSSL que é um projeto dedicado específicamente a prover uma instalação simples da OpenSSL. Vc pode baixar diretamente da página deles ou por exemplo no BaixaKi (etc). Existe uma versão “light” que instala apenas os recursos básicos (que devem ser suficientes) com pouco mais de 1M e, uma versão mais completa com aprox 8MB.

Tags: , , ,