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:
-
- • 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.
-
-
- o Indicador de Status Positivo: “+OK”
- o Indicador de Status Negativo: “-ERR”
- o A resposta termina com octeto (em decimal 046) e um CRLF
-
-
- Autorização: Identificação
- Transação: Atender pedidos do Cliente
- Atualização: Servidor libera os recursos utilizados
-
o Conforme podemos ver na Figura 1, os estados de uma conexão são:
-
-
• 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. Estados de conexão do Protocolo Pop3
Estados:
-
- • 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. Estados de conexão do Pop3.
Comandos:
Os comandos no Estado de Autenticação são:
-
-
-
- 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.
-
-
- +OK nome da caixa é válido
- -ERR nome da caixa não é válido
-
o Possíveis Respostas:
-
-
• USER
-
-
-
-
- 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.
-
-
- +OK caixa de correio acessada
- -ERR senha inválida
- -ERR impossível acessar a caixa de correio
-
o Possíveis Respostas:
-
-
• PASS
-
-
-
-
- o Significado: Sair.
- o Argumentos: Não possui argumentos.
- o Restrições: Neste momento ele não possui restrições.
-
-
- +OK
-
o Possíveis Respostas:
-
-
• 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:
-
-
-
- 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.
-
-
- +OK nn mm
-
o Possíveis Respostas:
-
-
- C: STAT
- S: +OK 2 320
-
o Exemplo:
-
-
• STAT
-
-
-
-
- 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.
-
-
- +OK seguido do scan listing
- -ERR a mensagem não existe
-
o Possíveis Respostas:
-
-
- • 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.
-
o Exemplos:
-
-
• LIST
-
-
-
-
- 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.
-
-
- +OK seguido dos octetos e da mensagem inteira
- -ERR a mensagem não existe
-
o Possíveis Respostas:
-
-
- • C: RETR 1
- • S: +OK 120 octects
- • S: O servidor envia a mensagem inteira
-
o Exemplo:
-
-
• RETR
-
-
-
-
- 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.
-
-
- +OK message nn deleted
- -ERR mesage nn already deleted
-
o Possíveis Respostas:
-
-
- • C: DELE 1
- • S: +OK message 1 deleted
- • C: DELE 2
- • S: -ERR message 2 already deleted
-
o Exemplos:
-
-
• DELE
-
-
-
-
- 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.
-
-
- +OK
- -ERR
-
o Possíveis Respostas:
-
-
- • C: NOOP
- • S: +OK
-
o Exemplo:
-
-
• NOOP
-
-
-
-
- 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.
-
-
- +OK maildrop has nn messages (nn octects)
- -ERR maildrop not have messages
-
o Possíveis Respostas:
-
-
- • C: RSET
- • S: +OK maildrop has 2 messages (320 octects)
-
o Exemplo:
-
-
• 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:
-
-
-
- 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.
-
-
- +OK dewey POP3 server signing off (maildrop empty)
- +OK Dewey POP3server signing off (nn messages left)
-
o Possíveis Respostas:
-
-
- • C: QUIT
- • S: +OK dewey POP3 server signing off (maildrop empty)
- • C: QUIT
- • +OK dewey POP3 server signing off (2 messages left)
-
o Exemplos:
-
-
• 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:



April 18th, 2009 at 5:00 PM
[...] 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 [...]