Escrito em March 29th, 2009 as 11:58 pm por Pablo Roveroni

0 Comentários

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

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:

  1. Pop3 com Sockets – Parte I
  2. Reflection – Parte 4 (Propriedades)
, ,

Be the first to start a conversation

Deixa uma Resposta

znjdb32s6g