Acessando contas GMail com o Indy via POP3 SSL

 

O GMail é o serviço de correio grátis do Google.  Recentemente, as contas GMail também poderão ser acessadas por meio do protocolo POP3 e SMTP (e podem ser utilizadas por programas cliente de correio como o Outlook).

O Gmail tem a seguinte peculiaridade: o acesso ao mesmo via POP3 utiliza encriptação SSL e portas não padronizadas. Esta dica, explica resumidamente como fazer conexões POP3 service do GMail, através de componentes Indy.

Precisamos colocar estes componentes em um formulário:

      Um TidPop3 (idPop31) (Indy Aba Clients)

      Um TidMessage (idMessage1) (Indy Aba Misc)

      Um TIdSSLIOHandlerSocket (IdSSLIOHandlerSocket1) (Indy Aba I/O handlers)

      Um TMemo (Memo1)

      Um TButton (Button1)

 

Para que o SSL funcione, o Indy usa a biblioteca OpenSSL, que é GPL e foi implementada por terceiros, por isso, temos que fazer o download de forma que o TIdSSLIOHandlerSocket possa usá-la.

Para este teste, fizemos o download de: http://indy.fulgan.com/SSL e utilizamos o arquivo indy_openssl096.zip. Descomprimimos o ZIP e colocamos os dois DLLs no diretório do projeto.

Agora, fazemos com que o aquidPop31 utilize o IdSSLIOHandlerSocket1, configurando-o na propriedade IOHandler.

Colocamos o nome do servidor pop na propriedade Host de idPop31 - que no caso do Gmail é pop.gmail.com - designamos a porta - que para este caso em especial é a porta 995 - e atribuímos o username e senha no componente idPop31.

Isto feito, para testar a implementação, inserimos este trecho de código no evento OnCLick de Button1:

 

procedure TForm1.Button1Click(Sender: TObject);

var

  n,  nummsgs: integer;

begin

  Memo1.Lines.Clear;

  //Conectamos!

  idpop31.Connect(0);

  //Obtemos o numero de emails que ha na fila

  NumMsgs := idpop31.CheckMessages;

  Memo1.lines.add('Emails:' +IntToStr(NumMsgs));

  for n:=1 to NumMsgs do

  begin

    idpop31.RetrieveHeader(n,idMessage1);

    Memo1.Lines.Add('Email Nº:'+IntToStr(n)+

      ' De:'+idMessage1.From.Text+

      ' Tema:'+idMessage1.Subject);

    idMessage1.Clear;

  end;

  idpop31.Disconnect;

end;

 

E teremos um exemplo que obterá os cabeçalhos dos e-mails da conta de GMail.

 

Nota: precisamos de uma versão atualizada da biblioteca Indy. Se o seu Delphi não a tiver, não se preocupe, pode fazer o download no site oficial: http://www.indyproject.org.