Escrito em March 23rd, 2009 as 12:08 am por Pablo Roveroni

2 Comentários

Este post ia ser sobre iTextSharp, mas antes que fique chato e fale apenas desse “maledeto” componente, irei falar sobre como acessar o protocolo Pop3 utilizando sockets, na verdade eu ia mandar este “artigo” pra tentar publicar em uma resvista de dotnet, mas devido a uma série de impeditivos de tempo, de requisitos e tudo mais, desisti e decidi publicar aqui mesmo.
Pois é, eu sempre encontro posts, dicas e documentos em como enviar emails utilizando o smtp, mas nunca vejo nada falando sobre o pobre do Pop3; na verdade o smtp é muito importante sim, já que afinal de contas é ele o responsável pelo envio dos emails.
A necessidade de se construir este componente foi há algum tempo atrás quando eu recebia (na verdade ainda recebo), muitos spans (Ah… como eu odeio isso!). Basicamente o que eu precisava era excluir os meus e-mails antes mesmo de baixá-los, pois sem brincadeira, havia muitos, mas muitos e-mails na minha caixa de mensagens e muitas vezes as mensagens continham html, arquivos e todo tipo de bobeira que se pode imaginar. Por ser Catch All, minha conta vivia lotada e eu como bom exemplo de relaxo, não checo meus e-mails diariamente, na verdade eu até gostaria, mas quando eu esqueço e quando lembro ou estou cansado de mais ou não posso, pois estou no trabalho; e trabalho é trabalho e vida pessoal é vida pessoal.

O protocolo Pop3
O Post Office Protocol version 3 ou Pop3, é um protocolo utilizado no acesso remoto a uma caixa de correiro eletrônico. Ele está definido no RFC (Request For Comments) 1939 que pode ser encontrado no link http://www.ietf.org/rfc/rfc1939.txt. Neste documento estão listados todos os comandos para utilização deste protocolo, bem como a definição de que ele permite que todas as mensagens contidas numa caixa de correio eletrônico possam ser transferidas sequêncialmente para um computador local.
Neste post descreverei alguns dos comandos, pois o intuito aqui é dar uma noção de como utilizar o protocolo; a sua aplicabilidade vai variar de acordo com as necessidades de cada um.
Diz-se que o protocolo Pop3 funciona de maneira off-line, uma vez que o processo por ele suportados baseia-se nas seguintes etapas: login, download das mensagens, processar as mensagens (já em modo off-line). Por buscar primeiro as informações no servidor e só depois processar as mensagens, este protocolo é muito útil para usuários que utilizam a internet através de redes públicas comutadas ou seja, a nossa boa e velha Dial-Up. Como sabemos, o custo da ligação é proporcional ao período da mesma e convenhamos que o custo de uma ligação não é pouco e a conexão ADLS não é tão difundida assim, seja pelo custo ou pela capacidade técnica de infra-estrutura.

As Principais Características do Protocolo POP3:

Operação:

    1. • Por padrão o protocolo Pop3 utilizando o protocolo TCP inicia um serviço que utiliza a porta 110
      • Após a conexão, há a troca de comandos e respostas entre o cliente e o servidor.
      • Os comandos são Case-Insensitive ou seja, ele despreza acentos.
      • Os comandos consistem de caracteres ASCII.
      • Formato de um comando: Keyword Arguments ..
      • As respostas consistem de um indicador de status e uma palavra chave com ou sem informação adicional.
        1. o Indicador de Status Positivo: “+OK”
          o Indicador de Status Negativo: “-ERR”
          o A resposta termina com octeto (em decimal 046) e um CRLF
            1.  Autorização: Identificação
               Transação: Atender pedidos do Cliente
               Atualização: Servidor libera os recursos utilizados
        1. o Conforme podemos ver na Figura 1, os estados de uma conexão são:

    1. • Exemplo:

      • As mensagens são apagadas da caixa de correio (opcionalmente, o protocolo pode ser configurado para que as mensagens não sejam apagadas da caixa de correio).

Figura 1
Figura 1. Estados de conexão do Protocolo Pop3

Estados:

    1. • Estado de Autorização: quando aberta a conexão TCP entre cliente e servidor, o servidor Pop envia uma saudação, podendo ser qualquer resposta positiva, dando início ao Authorization State (Estado de Autorização).
      Exemplo: +OK Pop3 Server ready
      • Identificação e Autorização através da combinação dos comandos USER e PASS conforme vemos na Figura 2.

Figura 2
Figura 2. Estados de conexão do Pop3.

Comandos:
Os comandos no Estado de Autenticação são:

        1. o Significado: Usuário.
          o Argumentos: É um string de identificação para uma caixa de correio, que só tem significado para o servidor.
          o Restrições: Só podem ocorrer no estado de Autorização após uma “saudação” ou comandos USER e PASS sem sucesso.
            1.  +OK nome da caixa é válido
               -ERR nome da caixa não é válido
        1. o Possíveis Respostas:

    1. USER

        1. o Significado: Senha.
          o Argumentos: É a palavra que garante o acesso à caixa de correio.
          o Restrições: Só pode ocorrer no Estado de Autorização, após um comando USER bem sucedido.
            1.  +OK caixa de correio acessada
               -ERR senha inválida
               -ERR impossível acessar a caixa de correio
        1. o Possíveis Respostas:

      • PASS

          1. o Significado: Sair.
            o Argumentos: Não possui argumentos.
            o Restrições: Neste momento ele não possui restrições.
              1.  +OK
          1. o Possíveis Respostas:

      1. QUIT

    Identificando o cliente e aberto o maildrop (repositório de e-mails), a sessão Pop3 entra em Estado de Transação. Os comandos no Estado de Transação (Transaction State) são:

          1. o Argumentos: Não possui argumentos.
            o Restrições: Só pode ocorrer no Estado de Transação.
            o Discussões: O servidor emite uma resposta positiva contendo informações para o maildrop (“+OK”) seguido de um espaço, o número de mensagens no maildrop, um espaço e o tamanho do maildrop em octetos.
              1.  +OK nn mm
          1. o Possíveis Respostas:

              1.  C: STAT
                 S: +OK 2 320
          1. o Exemplo:

      1. STAT

          1. o Argumentos: Um número de mensagem (opcional), o qual não deve se referir a uma mensagem marcada como apagada.
            o Restrições: Só pode ocorrer no Estado de Transação.
            o Discussões: Se um argumento foi dado, e o servidor emite uma resposta positiva com uma linha contendo informações para aquela mensagem, esta linha é chamada de “Scan Listing”. Um “Scan Listing” consiste o número da mensagem, seguido por um espaço e o tamanho exato da mensagem em octetos.
              1.  +OK seguido do scan listing
                 -ERR a mensagem não existe
          1. o Possíveis Respostas:

              1. • C: LIST
                • S: +OK 2 messages (320 octects)
                • S: 1 120
                • S: 2 200
                • C: LIST 2
                • S +OK 2 200
                • C: LIST 3
                • S: – ERR mensagem inexistente.
          1. o Exemplos:

      1. LIST

          1. o Argumentos: Um número de mensagem, o qual não pode fazer referência a uma mensagem marcada como apagada.
            o Restrições: Só pode ocorrer no Estado de Transação.
            o Discussões: Se um servidor emite uma resposta positiva, então a resposta é multi-linha. Após o “+OK”, o servidor envia a mensagem correspondente ao número de mensagem dado.
              1.  +OK seguido dos octetos e da mensagem inteira
                 -ERR a mensagem não existe
          1. o Possíveis Respostas:

              1. • C: RETR 1
                • S: +OK 120 octects
                • S: O servidor envia a mensagem inteira
          1. o Exemplo:

      1. RETR

            1. o Argumentos: Um número de mensagem, o qual não pode fazer referência a uma mensagem marcada como apagada.
              o Restrições: Só pode ocorrer no Estado de Transação.
              o Discussões: O servidor marca a mensagem como apagada e a partir daí qualquer referência à mensagem irá gerar um erro. Ele apenas marca a mensagem como apagada, mas ela ainda não foi apagada.
                1.  +OK message nn deleted
                   -ERR mesage nn already deleted
            1. o Possíveis Respostas:

                1. • C: DELE 1
                  • S: +OK message 1 deleted
                  • C: DELE 2
                  • S: -ERR message 2 already deleted
            1. o Exemplos:

        1. DELE

            1. o Argumentos: Não possui argumentos.
              o Restrições: Só pode ocorrer no Estado de Transação.
              o Discussões: O servidor apenas responde com uma mensagem positiva.
                1.  +OK
                   -ERR
            1. o Possíveis Respostas:

                1. • C: NOOP
                  • S: +OK
            1. o Exemplo:

        1. NOOP

            1. o Argumentos: Não possui argumentos.
              o Restrições: Só pode ocorrer no Estado de Transação.
              o Discussões: Para as mensagens que oram marcadas como apagadas pelo servidor, elas são desmarcadas. O servidor então responde positivamente.
                1.  +OK maildrop has nn messages (nn octects)
                   -ERR maildrop not have messages
            1. o Possíveis Respostas:

                1. • C: RSET
                  • S: +OK maildrop has 2 messages (320 octects)
            1. o Exemplo:

        1. RSET

      Os commandos no Estado de Atualização (Update State) são os que finalizam a conexão. Os comandos de Estado de Atualização são:

            1. o Argumentos: Não possui argumentos.
              o Restrições: Não possui restrições.
              o Discussões: O servidor Pop3 remove todas as mensagens marcadas como excluídas e responde o status desta operação.
                1.  +OK dewey POP3 server signing off (maildrop empty)
                   +OK Dewey POP3server signing off (nn messages left)
            1. o Possíveis Respostas:

                1. • C: QUIT
                  • S: +OK dewey POP3 server signing off (maildrop empty)
                  • C: QUIT
                  • +OK dewey POP3 server signing off (2 messages left)
            1. o Exemplos:

        1. QUIT

      Existem outros comandos que são opcionais e que caso você tenha o interesse em saber um pouco mais sobre eles, basta que você acesse o link http://www.ietf.org/rfc/rfc1939.txt e leia o RFC que é o documento oficial referente ao protocolo Pop3.
      Além do POP3 existe também um outro protocolo associado ao recebimento de mensagens de correio eletrônico, este protocolo é o IMAP4 (Internet Message Access Protocol) versão 4. Ele é um protocolo de gerenciamento de correio eletrônico superior em recursos ao POP3. Contudo iremos trabalhar apenas com o protocolo POP3, mas nada impede que você implemente novas funcionalidades ao sistema que irei descrever no próximo post. Criei o sistema utilizando um projeto de Windows Forms, mas sinta-se a vontade para criar outros tipos de projeto. Se possível me envei um comentário dizendo uma aplicação que você encontrou para esta idéia.
      Peço que você entenda o motivo de “quebrar” este texto todo em mais de um post. Fica pesado pra quem escreve e nem fica chato pra quem lê.
      Abraços e até mais!

      Posts Relacionados:

      1. Pop3 com Sockets (Contectando e Contando as Mensagens no MailDrop) – Parte II
      , ,

      2 Respostas to “Pop3 com Sockets – Parte I”


      1. mark

        1 year ago

        Excellent site, It was pleasant to me.

      1 Trackbacks For This Post

      1. Pop3 com Sockets (Contectando e Contando as Mensagens no MailDrop) - Parte II | .Net Max Says:

        [...] 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 [...]

      Deixa uma Resposta

      znjdb32s6g