# Correio Eletrônico
## Introdução

O correio eletrônico, comumente chamado de email, foi utilizado inicialmente no meio acadêmico nos anos 80. Em duas décadas, tornou-se bastante popular e sua utilização cresceu exponencialmente.
Os primeiros sistemas de correio eletrônico consistiam apenas em protocolos de transferência de arquivos(mensagens). Ficou convencionado que a 1ª linha de cada mensagem devia conter o endereço do destinatário. Essa técnica, aos poucos, se mostrou bastante deficitária e limitada, inviabilizando sua utilização no envio de mensagens a um grupo de pessoas, por exemplo. Além disso, várias foram as críticas a esses sistemas, dentre as quais destacamos:
* as mensagens não apresentavam uma estrutura interna
* não havia garantia de entrega da mensagem
* a interface não era integrada ao sistema de transmissão, ou seja, usuário editava a mensagem, saía do editor e “rodava” um software para transferência da mensagem.
* impossível enviar mensagem integrando texto, desenhos, voz, etc.
Após isso, foram propostos sistemas de correio eletrônico mais elaborados e completos. Em 1982, um grupo de estudantes propôs o sistema de correio eletrônico da ARPANET, cujas propostas foram publicadas nas RFC821 e RFC822, as quais tratavam de protocolos de transmissão e formatos de mensagens, respectivamente.

## Arquitetura e serviços

Os sistemas de correio eletrônico são organizados em dois subsistemas: agentes de usuário, responsáveis pela leitura e envio das mensagens e agentes de trasnferência/transporte de mensagem. Os agentes de usuário são programas locais, cujos métodos podem ser baseados tanto em comandos como em menus/gráficos, o que permite interação com o sistema de correio eletrônico. Os agentes de transferência, por sua vez, são responsáveis por executar tarefa em 2º plano, ou seja, pela movimentação das mensagens por todo o sistema.
Um sistema típico de correio eletrônico apresenta 5 funções básicas, quais sejam:
* Composição: processo de criar mensagens e respostas
* Trasnferência: deslocamento de mensagens entre remetente e destinatário, de forma transparente para o usuário.
* Geração de relatórios: confirmação de entrega de mensagens
* Exibição: necessária para leitura das mensagens recebidas
* Disposição: Refere-se às possibilidades existentes para o destinatário após receber uma mensagem. Ex: apagar, mover, etc

## Definições

Para melhor entendimento, é necessário saber o significado de algumas siglas.
E-mail: Eletronic Mail, sinônimo de correio eletrônico. É também o nome dado à mensagem eletrônica enviada através do correio eletrônico.
* MUA: Mail User Agent, é o software utilizado pelo cliente para gerenciar seus e-mails. É responsável por receber da caixa de entrada e repassar ao MTA para envio.
* MTA: Mail Transfer Agent, realiza a transferência das mensagens. Recebe elas do MUA ou de outro MTA, e com base no cabeçalho define a forma que entregará a mensagem ao MDA.
* MDA: Mail Delivery Agent, promove a entrega das mensagens. As recebe do MTA e realiza a entrega na caixa de mensagens do destinatário.
Além disso, os e-mails são compostos de basicamente duas partes: cabeçalho (ou header, definido pela RFC 822) e corpo (ou body), onde o cabeçalho contém as informações do protocolo utilizado, do remetente, data, hora, assunto, domínios, e diversas outras informações, enquanto o corpo contém a mensagem propriamente dita.
A grande maioria dos webmails e dos MUAs ocultam o cabeçalho completo, exibindo apenas informações básicas, como remetente, destinatários, data e hora e assunto. Cada campo received indica um servidor SMTP que foi visitado no trajeto da mensagem.
Cada conta de e-mail é uma caixa postal, onde seu proprietário pode criar novas mensagens, ler antigas, apagar, classificar, dentre outros recursos, dependendo do servidor de e-mail.

## Protocolos de envio

Geralmente são utilizados pelos MTAs para envio de mensagens, e executam as transferencias de dados.

### UUCP

O primeiro protocolo de transferencia desenvolvido foi o UUCP (Unix to Unix CoPy), sob regência do RFC 976. Surgiu e foi bastante difundido por volta dos anos 80.
Inicialmente foi utilizado na ARPANET, para troca de mensagens entre Universidades. Como funcionava sobre redes comutadas por circuitos (e portanto a tarifação era por tempo de conexão), e ainda por ser necessário uma conexão entre cada cliente, que muitas vezes estavam em outros países, era comum implantar um sistema concentrador de atividades.
Este concentrador sincronizava-se com os clientes e armazenava as funções pedidas, como envio de e-mails e transferencia de arquivos, e em determinada hora conectava-se e realizava as funções da fila. Após concluído, desconectava-se e voltava a armazenar as funções.
Este comportamento conferia uma certa desvantagem por não sem em tempo real, com atrasos de várias horas, mas com certeza havia grande vantagem sobre os correios convencionais, que demoravam dias ou meses. Os e-mails conforme esta tecnologia eram formados pelo nome da máquina seguido de exclamação e do nome do usuário (Exemplo: dominio.com.br!nome.de.usuario. Neste tipo de protocolo, era extremamente comum o uso de servidores intermediários, o que barateava a comunicação. Em geral, um servidor só possuía acesso aos seus adjacentes. Se eu fosse mandar um e-mail para a China por exemplo, deveria utilizar o endereço de destinatário ServidorBrasil!ServidorEuropa!ServidorLesteEuropa!ServidorChina!usuário. Esta prática aumentava ainda mais o atraso com que as mensagens chegavam.
Como esta definição de rotas estáticas era bastante trabalhosa, começaram a ser implantados na rede hops, que eram máquinas capazes de interpretar as rotas e reescrever outras mais rápidas e menos congestionadas, o que melhorou a velocidade da comunicação e reduziu custos.
Atualmente este protocolo ainda é utilizado em redes corporativas e alguns sistemas devido ao baixo custo, gerenciamento não-persistente de filas, porém com adaptações para uso sobre o protocolo TCP/IP. Gradativamente, no entanto, ela vem sido substituída por técnicas mais modernas.
A tecnologia utilizada pela NASA para comunicação com suas sondas e satélites é similar à UUCP.

### SMTP

SMTP, ou simple mail transfer protocol, conforme define o RFC 2821, é o protocolo mais utilizado atualmente para transmissão de mensagens de correio eletrônico.
O protocolo é utilizado pelo MTA para transferir a mensagem, e ele serve justamente para definir padrões de como entregar, e como interpretar os ados enviados. O padrão exige a codificação de binário em ASCII, e decodificação ASCII para binário na passagem ao MDA.
Em geral, uma transferencia SMTP é direta entre o servidor de origem e o de destino, não passando por nenhum intermediário. Os servidores armazenam as mensagens caso não possam ser entregues de imediato, por qualquer falha ou impedimento. A conexão é feita na porta TCP 25.
A comunicação entre servidores SMTP é estabelecida sobre o protocolo TCP/IP, com a identificação dos conectantes. Após estabelecida a conexão, há a troca de comandos entre o cliente e o servidor, iniciando-se com a identificação do remetente, após do destinatário, e por fim a mensagem.
Por se tratar de uma conexão persistente, podem ser enviadas diversas mensagens sequencialmente, bastando apenas especificar o remetente, destinatário e mensagem dos demais emails antes do comando de encerrar a conexão (quit).
Exemplo de transmissão SMTP

#### MIME

MIME não é um protocolo de transmissão de e-mails. É um formato de codificação dos caracteres utilizados na escrita do e-mail, ele serve para que letras em outros padrões de codificação diferentes do ASCII não sejam truncadas, e para transmissão de dados multimídia. Significa Multipurpose Internet Mail Extensions, e é regido pelas RFC 2045 e RFC 2046.
Exemplo de cabeçalho MIME
O cabeçalho MIME utiliza-se basicamente de dois elementos fundamentais: content-type e content-transfer-encoding.
O content-transfer-encoding indica qual codificação foi utilizada para transformar o conteúdo da mensagem em ASCII para o envio por SMTP. Sem este dado a mensagem fica truncada, pois não se sabe como decodificar a mesma. Há diversos tipos de codificação, sendo uma das mais comuns a quoted-printable.
O content-type define que tipo de conteúdo possui a mensagem, e indica ao MUA como tratar o determinado conteúdo. Podem ser desde conteúdos multimídia até textos simples.

## Protocolos de recebimento

Os protocolos de recebimento permitem ao usuário pegar arquivos e mensagens de sua caixa postal para seu computador local. Os protocolos utilizados para este fim são basicamente três: HTTP, IMAP E POP3.

### POP3

Protocolo de acesso extremamente simples, definido pelo RFC 1939. Seu nome vem da abreviação de Post Office Protocol versão 3.
Há basicamente três passos que devem ser executados: autenticação, transação e atualização. Na autenticação, após estabelecida a conexão, o cliente fornece um nome de usuário e uma senha, sem nenhuma obfuscação. Após, há duas opções para a transação: ler-e-apagar, e ler-e-guardar, o que influencia nos comandos que devem ser passados ao servidor. Na fase de atualização, que ocorre após o término da conexão, o servidor apaga ou marca como lida as mensagens, conforme definido na fase de transação.
Embora seja a 3ª versão deste protocolo, ele é muito simples. Utiliza-se basicamente de 6 comandos: user, pass, list, retr, dele e quit. Responde basicamente de duas formas: err quando um comando está incorreto, e ok quando o comando foi compreendido. A conexão é feita na porta TCP 110. Embora simples, é o mais indicado para pessoas que acessam e-mail de apenas um local.

### IMAP

O protocolo IMAP (Internet Message Access Protocol) é mais robusto que o POP, e está em sua quarta versão, primeira revisão., definido na RFC 3501. Seu poder aumentou sua complexidade relativamente ao POP.
O IMAP é ideal para usuário nômades, que acessam de diversos pontos, pois permite a gerência remota de ações, inclusive entre sessões. Não entendeu? Você organiza sua mensagens na pasta local e elas são organizadas similarmente na sua caixa postal, com comandos do usuário. Há também a vantagem de poder receber somente determinada parte de uma mensagem, nos casos de uma conexão lenta, estreita, ou muito cara (como celular por exemplo). Neste caso o usuário pode filtrar para receber parte da mensagem, escolher quais conteúdos baixar, ou seomente mensagens pequenas.
O poder que este protocolo confere é imenso. Vale a pena ler a RFC 3501.

## Protocolos híbridos
### Webmail

O webmail ou e-mail sobre HTTP é uma funcionalidade excelente para usuários em trânsito. A transmissão das mensagens para o servidor e da caixa de entrada ao usuário são feitas através do protocolo HTTP, que permite o acesso através de qualquer browser.
Isto confere maior agilidade e portabilidade ao uso do e-mail. É importante lembrar que as trocas entre servidores de webmail continuam sendo feitas através de SMTP.
O webmail pode ser considerada a modalidade de acesso a e-mails mais utilizada atualmente. Muitos webmails utilizam scripts que conferem funcionalidades IMAP ao usuário.