Neste pequeno post demonstrarei como conectar-se ao servidor Pop3, efetuar o login e contar a quantidade de mensagens existentes no servidor. Para os mais apressadinhos, todos as demais funções serão bem parecidas com estas, pois os comandos já demonstrei no post anterior (Pop3 com Sockets – Parte I).
Para criar a aplicação na qual demonstrarei a seguir, você precisa apenas criar uma nova solução e dois novos projetos, um do tipo Class Library e outro do tipo Windows.
No projeto da Class Library, crie uma classe chamada Pop; por hora o código contido nesta classe é exatamente este:
using System.IO;
using System.Net.Sockets;
namespace Pop
{
public class Pop3
{
private TcpClient clientetcp;
private NetworkStream ns;
private StreamReader sr;
private StreamWriter sw;
/// <summary>
/// Conecta-se ao servidor
/// </summary>
/// <param name="Servidor">HostName</param>
/// <param name="Porta">Número da Porta</param>
/// <param name="Usuario">Nome do Usuário</param>
/// <param name="Senha">Senha</param>
/// <returns>Retorna o status da Conexão</returns>
public string Conectar(string Servidor, int Porta, string Usuario, string Senha)
{
bool continuar = true;
string retorno = string.Empty;
if ((!string.IsNullOrEmpty(Servidor)) && Porta > 0 && (!string.IsNullOrEmpty(Usuario)) && (!string.IsNullOrEmpty(Senha)))
{
//Conecta-se ao servidor
clientetcp = new TcpClient(Servidor, Porta);
ns = clientetcp.GetStream();
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
//Caso a resposta do servidor seja positiva
if (sr.ReadLine().StartsWith("+OK"))
{
//Loga-se no servidor
sw.WriteLine("USER " + Usuario);
sw.Flush();
if(sr.ReadLine().StartsWith("+OK"))
{
sw.WriteLine("PASS " + Senha);
sw.Flush();
if (sr.ReadLine().StartsWith("+OK"))
{
retorno = "Conectado";
}
else
{
retorno = "Senha inválida";
}
}
else
{
retorno = "Usuário inválido";
}
}
else
{
retorno = "Servidor ou porta não existe";
}
}
else
{
retorno = "Você deve informar informar o nome do servidor, o número da porta, o usuário e a senha";
}
return retorno;
}
public string ContarMensagens()
{
string retorno = "0";
if (clientetcp.Connected)
{
sw.WriteLine("STAT");
sw.Flush();
string[] resposta = sr.ReadLine().Split(' ');
if (resposta.Length > 1)
{
retorno = resposta[1];
}
}
else
{
retorno = "-1";
}
return retorno;
}
}
}
Já no projeto Windows, criei um formulário com os seguintes controles:
1 StatusStrip com três labels.
4 TextBoxes. Sendo 1 para o nome do servidor (HostName), outro para a Porta, outra para o usuário e por fim um para a senha.
1 Botão para acionar o comando de conexão.
O formulário ficou conforme demonstro na Figura 1.
Figura 1
O código do formuário cujo nome dei de Killer, ficou assim:
using System;
using System.Windows.Forms;
using Pop;
namespace Mail_Killer
{
public partial class Killer : Form
{
private Pop.Pop3 pop3 = new Pop3();
public Killer()
{
InitializeComponent();
}
private void btnConectar_Click(object sender, EventArgs e)
{
this.Conectar();
}
private void Killer_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.lblQtdMsg.Visible = false;
this.lblEspaco00.Visible = false;
}
/// <summary>
/// Conecta-se ao servidor
/// </summary>
private void Conectar()
{
string servidor = this.txtservidor.Text;
string porta = this.txtPorta.Text;
string usuario = this.txtUsuario.Text;
string senha = this.txtSenha.Text;
string status = string.Empty;
int qtdmsg = 0;
if (!string.IsNullOrEmpty(servidor))
{
if (!string.IsNullOrEmpty(porta))
{
if (!string.IsNullOrEmpty(usuario))
{
if (!string.IsNullOrEmpty(senha))
{
//Conecta-se ao servidor
status = pop3.Conectar(servidor, int.Parse(porta), usuario, senha);
}
else
{
status = "Informe uma senha";
}
}
else
{
status = "Informe um usuário";
}
}
else
{
status = "Informe uma porta";
}
}
else
{
status = "Informe um servidor";
}
//Conta a quantidade de mensagens no servidor
qtdmsg = int.Parse(pop3.ContarMensagens());
//Molda a mensagem com a quantidade de mensagens de acordo com a quantidade de mensagens no MailDrop.
if (qtdmsg < 0)
{
this.lblQtdMsg.Text = "Não foi possível contar a quantidade de mensagens no MailDrop";
}
else
{
if (qtdmsg == 0)
{
this.lblQtdMsg.Text = "Você não possui mensagens";
}
else
{
if (qtdmsg == 1)
{
this.lblQtdMsg.Text = "Você possui 1 mensagem";
}
else
{
if (qtdmsg > 1)
{
this.lblQtdMsg.Text = "Você possui " + qtdmsg.ToString() + " mensagens";
}
}
}
}
//Exibe o status da Conexão
this.lblStatus.Text = status;
//Exibe a quantidade de mensagens no MailDrop
this.lblEspaco00.Visible = true;
this.lblQtdMsg.Visible = true;
this.ststpStatus.Refresh();
}
}
}
Posts Relacionados:




Be the first to start a conversation