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. for (int i = 0; i < 10; i++) { // 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; } // Assunto 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) { // Corpo do email 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.