Blog da Romar: Como Ler Email Programaticamente em C#
Como Ler Email Programaticamente em C#
Para fazer a leitura programaticamente de emails, existe uma biblioteca chamada OpenPop.NET, que é uma implementação open source de um cliente POP3 e um analisador MIME escrito em C#. Com esta biblioteca é possível ler as informações de email, tais como, origem, destino, assunto, mensagem, etc.
Para demonstrar a utilização desta biblioteca foi criado o projeto LerEmail no Visual Studio, que faz a leitura das informações como origem, destino assunto e mensagem dos 10 emails mais recentes recebidos na caixa de entrada de um servidor web.
Mas antes de utilizar a biblioteca é necessário incluir no projeto do Visual Studio. A biblioteca OpenPop.NET pode ser incluída utilizando-se a ferramenta de gerenciamento de pacotes NuGet do Visual Studio. Esta ferramenta pode ser acessada clicando com o botão direito sobre a pasta References do projeto e selecionando a opção Manage NuGet Packages.
Na tela Manage NuGet Packages fazer uma busca pela biblioteca OpenPop.NET e clicar no botão Install, quando a biblioteca for localizada.
Após a inclusão da biblioteca no projeto do Visual Studio, pode-se utilizar a classe Pop3Client() que possui os métodos GetMessageHeaders(int) e GetMessage(int) para obter as informações do cabeçalho da mensagem e do corpo da mensagem, respectivamente. Para obter estas informações é necessário passar para estes métodos o parâmetro número do email que deve ser lido.
A classe Pop3Client() faz a leitura dos emails utilizando um contador que ordena em ordem decrescente o email, sendo o de maior número o email mais recente e o de menor número o email mais antigo. Para obter o número total de emails utilizar o método GetMessageCount().
Portanto para o caso de ler os emails mais recentes é necessário obter o número total de emails através do método GetMessageCount() e a partir dele ir decrementando o número até obter os emails desejados. Para o caso de ler os emails mais antigos iniciando-se, por exemplo, do primeiro email utilizar o número 1 até o número de emails desejados.
Segue o código do método BuscaEmail(string, int, string, string) que exemplifica como ler os 10 emails mais recentes da caixa de entrada.
static void BuscaEmail(string nome_servidor_pop, int porta, string email, string senha)
// A instrução using faz a desconexão do servidor de email
// e libera corretamente o objeto
using (Pop3Client cliente_pop = new Pop3Client())
// Faz a conexão com o servidor
cliente_pop.Connect(nome_servidor_pop, porta, false);
// Faz a autenticação no servidor
cliente_pop.Authenticate(email, senha,
AuthenticationMethod.UsernameAndPassword);
// Obtêm o número total de emails da caixa de entrada
int numero_emails = cliente_pop.GetMessageCount();
// Faz a leitura dos 10 emails mais recentes da caixa de entrada,
// iniciando a partir do último email recebido.
// Cabeçalho da mensagem
MessageHeader headers = cliente_pop.GetMessageHeaders(numero_emails);
// Email De:
RfcMailAddress emailDe = headers.From;
// Email Para:
// Faz a leitura de todos os emails Para, mas exibe somente o primeiro.
List<RfcMailAddress> emailParaList = headers.To;
string emailPara = string.Empty;
if (emailParaList != null && emailParaList.Count() > 0)
emailPara = emailParaList.First().Address;
string assunto = headers.Subject;
// Data de envio
DateTime data_envio = headers.DateSent;
// Verifica se o endereço de email De é válido
if (emailDe.HasValidMailAddress)
Message mensagem = cliente_pop.GetMessage(numero_emails);
string corpo_email = mensagem.MessagePart.GetBodyAsText();
// Imprime as informações do email
Console.WriteLine("De: " + emailDe);
Console.WriteLine("Para: " + emailPara);
Console.WriteLine("Assunto: " + assunto);
Console.WriteLine("Data de Envio: " + data_envio);
Console.WriteLine(corpo_email);
Console.WriteLine("".PadLeft(30, '-'));
// Decrementa o número de emails
numero_emails--;
O método BuscaEmail(string, int, string, string) faz a conexão e autenticação com o servidor, obtêm o número total de emails e a partir daí faz a leitura dos 10 emails mais recentes da caixa de entrada e exibe em uma tela console as informações dos emails.