por Cesar Cassiano Schimanco

C# - Ler caixa de e-mail do Gmail, Hotmail, Yahoo

Este é um artigo que tem o objetivo de mostrar como ler uma caixa de e-mail do Gmail, Hotmail, Yahoo ou qualquer outro que use POP.
Abaixo segue o código que utilizei para ler a caixa de e-mail do Hotmail e do Gmail.
Para isso eu utilizei uma DLL OpenPop.dll, que pode ser baixada junto com o projeto no final da página ou neste link. A documentação do OpenPop.NET fica neste link aqui

Se quiser enviar e-mail veja este artigo.

Para mudar o provedor de leitura (Gmail, Hotmail, Yahoo ou qualquer outro) basta mudar o domínio, porta e SSL na linha abaixo.

client.Connect(SERVIDOR, PORTA, SSL);

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="pop.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <div style="color:Red">
            <asp:Literal ID="litMensagemErro" runat="server" />
        </div>
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    usuário:
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtUsername" />
                </td>
            </tr>
            <tr>
                <td>
                    senha:
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtPassword" TextMode="Password" />
                </td>
            </tr>
        </table>
        <div>
            <asp:Button ID="btnLer" Text="Ler" runat="server" onclick="btnLer_Click" />
        </div>
        <asp:Repeater runat="server" ID="repMensagens" OnItemDataBound="repMensagens_ItemDataBound">
            <HeaderTemplate>
                <table border="1">
                    <tr>
                        <td>
                            <strong>De</strong>
                        </td>
                        <td>
                            <strong>Título</strong>
                        </td>
                        <td>
                            <strong>Mensagem</strong>
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <asp:Literal ID="litDe" runat="server" />
                    </td>
                    <td>
                        <asp:Literal ID="litTitulo" runat="server" />
                    </td>
                    <td>
                        <pre><asp:Literal ID="litMensagem" runat="server" /></pre>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using OpenPop.Pop3;
using OpenPop.Mime;

namespace pop
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnLer_Click(object sender, EventArgs e)
        {
            try
            {
                using (Pop3Client client = new Pop3Client())
                {
                    //Para conectar no servidor do gmail use a porta 995 e SSL
                    client.Connect("pop.gmail.com", 995, true);
                    //Para conectar no servidor do hotmail use a porta 995 e SSL
                    //client.Connect("pop3.live.com", 995, true);
                    //usuário e senha para autenticar
                    client.Authenticate(txtUsername.Text, txtPassword.Text);
                    //Pega o número de mensagens
                    int messageCount = client.GetMessageCount();

                    //Instanciar a lista 
                    List<Message> mensagens = new List<Message>();
                    //Pegar as mensagens
                    for (int i = messageCount; i > 0; i--)
                    {
                        //Adicionar a mensagem a lista
                        mensagens.Add(client.GetMessage(i));
                    }
                    //Popular o repeater com as mensagens
                    repMensagens.DataSource = mensagens;
                    repMensagens.DataBind();
                }
            }
            catch (Exception ex)
            {
                //Caso ocorra algum erro, uma mensagem será exibida na página
                litMensagemErro.Text = ex.ToString();
            }
        }

        protected void repMensagens_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                //Limpar a mensagem de erro.
                litMensagemErro.Text = string.Empty;
                //Pegar o Container.DataItem e converter para o tipo Message.
                Message mensagem = (Message)e.Item.DataItem;
                //Encontrar os Literals no Repeater
                Literal litDe = (Literal)e.Item.FindControl("litDe");
                Literal litTitulo = (Literal)e.Item.FindControl("litTitulo");
                Literal litMensagem = (Literal)e.Item.FindControl("litMensagem");
                //Popular os literals com os dados do Container.DataItem
                //DisplayName = Nome de quem enviou
                //Address = e-mail de quem enviou
                litDe.Text = string.Format("{0} ({1})", mensagem.Headers.From.DisplayName, mensagem.Headers.From.Address);
                //Subject = Pegar o título da mensagem
                litTitulo.Text = mensagem.Headers.Subject;
                //Pegar o texto da mensagem
                //Verifica se o conteúdo é texto
                MessagePart mpText = mensagem.FindFirstPlainTextVersion();
                MessagePart mpHtml = mensagem.FindFirstHtmlVersion();
                if (mpText != null)
                    litMensagem.Text = mpText.GetBodyAsText();
                else if (mpHtml != null)
                    litMensagem.Text = mpHtml.GetBodyAsText();
            }
        }
    }
}

 

Download do OpenPop.dll
Download do projeto completo

Comentários

Carregando comentários

Postar um novo comentário



Processando...