sexta-feira, 12 de novembro de 2010

OpenPOP - Para ler, baixar e-mails e analisar a partir de um servidor POP3

Cenário: Para ler, baixar e-mails e analisar a partir de um servidor POP3, com ou sem senha, com e sem uma ligação segura (SSL).

O que é POP3?

Tecnicamente utilizaremos o protocolo POP3, O "Post Office Protocol (POP3) é um protocolo utilizado no acesso remoto a uma caixa de correio eletrônico. Ele está definido no RFC 1225 e permite que todas as mensagens contidas numa caixa de correio eletrônico possam ser transferidas sequencialmente para um computador local. Aí, o utilizador pode ler as mensagens recebidas, apagá-las, responder-lhes, armazena-las, etc.." Quer saber mais a respeito? Acesse o link na Wikipédia: http://pt.wikipedia.org/wiki/Post_Office_Protocol

Como faremos?

Fiz uma pesquisa na internet de vários componentes pagos/free que me ajudariam nesta atividade, e uma opção bacana seria o OpenPop , trata-se de um projeto open source (código fonte aberto), desenvolvido em C# (.NET) ... Quer melhor que isso? Este componente implementaria a busca e leitura de emails na sua caixa postal...

Uma observação: O OpenPop inicialmente acessa qualquer servidor POP, contudo, sem SSL , mas daremos um jeito adiante... :)
Download do OpenPop

1. Baixe o OpenPOP através de um dos links abaixo:

http://cid-8ae8d416e1189d41.skydrive.live.com/self.aspx/P%c3%bablico/C^3/Components/POP3/openPOP.rar
Ou
http://sourceforge.net/projects/hpop/

Iniciando o desenvolvimento

Nosso projeto

1. No Visual Studio, crie um projeto do tipo Windows App, neste exemplo estou utilizando o C#.

2. Após copiar os componentes para um diretório de sua preferência, adicione a referência do componentes MimeParser e o OpenPop ao seu projeto.

Eu não falei da classe MimeParser, ela existe devido a norma existente para formatação de mensagens de emails, simplificando as coisas, você não vai precisar fazer código para poder ler o texto dos seus emails... hehe, quer saber mais a respeito?? Acesse o link: http://pt.wikipedia.org/wiki/MIME


3. Acesse o form (modo code) e adicione a referência dos namespaces conforme abaixo:

using OpenPOP.POP3; using System.IO; using OpenPOP.MIMEParser;


4. Adicione o botão no form, e no evento do mesmo coloque o código abaixo:

private void button1_Click(object sender, EventArgs e)
{
try { POPClient _pop = new POPClient("pop3.servidor.com.br", 110, "suaconta@seudominio.com.br", "seunome", AuthenticationMethod.USERPASS); int Count = _pop.GetMessageCount(); if (Count > 0) { for (int i = Count; i >= 1; i -= 1) { StringBuilder sb = new StringBuilder(); OpenPOP.MIMEParser.Message _msg = _pop.GetMessage(i, false); sb.AppendLine("De: " + _msg.From + " " + _msg.FromEmail); sb.AppendLine("Para: " + _msg.TO[0]); sb.AppendLine("Assunto:" + _msg.Subject); sb.AppendLine("Mensagem: \n\r" + _msg.MessageBody[0]); if (_msg.AttachmentCount > 0) { string str = string.Empty; for (int A = 0; A < _msg.AttachmentCount; A++) { Attachment attachment = _msg.GetAttachment(A); object obj2 = str; str = string.Concat(new object[] { obj2, _msg.GetAttachmentFileName(attachment), "(", attachment.ContentLength, " bytes)\r\n" }); _msg.SaveAttachment(attachment, "c:\\pop_" + _msg.GetAttachmentFileName(attachment)); } } } } _pop.Disconnect(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
}
Note que o código acima funciona com qualquer servidor POP, sem SSL, para acessar um servidor com SSL, exemplo Gmail, Windows Live, Hotmail ... (você tinha que dificultar as coisas?? ) você tem que se conectar ao servidor POP através do soquete e uma camada SSL, para isto, será necessário fazer uma extensão do OpenSource, faremos os passos abaixo: 1. Faça o download dos códigos fontes do OpenSource; 2. Baixar arquivos da biblioteca Mentali's free SSL library , e o código fonte; 3. Teremos que fazer uma modificação no código dos componentes e fazer uma recompilação do projeto; Vou continuar com isso prometo...

Um comentário:

  1. Por acaso existe a continuação deste post?
    Se sim, favor disponibilizar o link em um comentário para facilitar.

    Obrigado

    ResponderExcluir