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