Como funciona o e-mail
por Marshall Brain - traduzido por HowStuffWorks Brasil
Introdução
Todos os dias, os usuários da internet enviam bilhões de mensagens de e-mail uns aos outros. Se você permanecer bastante tempo online, poderá enviar uma dúzia ou mais de e-mails por dia, sem nem mesmo pensar nisso. Obviamente, o e-mail se tornou uma ferramenta de comunicação extremamente popular.
Você já imaginou como o e-mail vai de seu computador até um amigo do outro lado do mundo? O que é um servidor POP3 e como ele guarda seu correio? As respostas irão surpreendê-lo, porque o e-mail é, em essência, um sistema incrivelmente simples. Neste artigo, veremos em profundidade o que é o e-mail e como ele funciona.
Introdução
Todos os dias, os usuários da internet enviam bilhões de mensagens de e-mail uns aos outros. Se você permanecer bastante tempo online, poderá enviar uma dúzia ou mais de e-mails por dia, sem nem mesmo pensar nisso. Obviamente, o e-mail se tornou uma ferramenta de comunicação extremamente popular.
Você já imaginou como o e-mail vai de seu computador até um amigo do outro lado do mundo? O que é um servidor POP3 e como ele guarda seu correio? As respostas irão surpreendê-lo, porque o e-mail é, em essência, um sistema incrivelmente simples. Neste artigo, veremos em profundidade o que é o e-mail e como ele funciona.
Uma mensagem de e-mail
De acordo com a revista Darwin Magazine: Pioneiros (em inglês), a primeira mensagem de e-mail foi enviada em 1971 por um engenheiro chamado Ray Tomlinson. Antes disso, você podia enviar mensagens para usuários somente em uma única máquina. A grande inovação de Tomlinson foi a capacidade de enviar mensagens para outras máquinas na internet usando o sinal @ para designar a máquina receptora.
Uma mensagem de e-mail é nada mais que uma simples mensagem de texto, um pequeno texto enviado para um destinatário. No início, e mesmo hoje, as mensagens de e-mail tendem a ser textos curtos (apesar da capacidade atual de adicionar anexos tornar muitas mensagens de e-mail longas). No entanto, mesmo com anexos, as mensagens de e-mail continuam sendo mensagens de texto. Veremos o porquê quando chegarmos à seção de anexos.
Clientes de e-mail
Você provavelmente já recebeu diversas mensagens de e-mail hoje. Para lê-las, você usa algum tipo de cliente de e-mail. Muitas pessoas usam clientes exclusivos bem conhecidos, como o Microsoft Outlook, Outlook Express, Eudora ou Pegasus. As pessoas que assinam serviços de e-mail gratuitos como Hotmail ou Yahoo usam um cliente de e-mail que aparece em uma página Web, se você for um cliente AOL, você usa o leitor de e-mail da AOL. Independente do tipo de cliente que você usa, ele geralmente faz quatro coisas:
• apresenta uma lista de todas as mensagens em sua caixa de correio por meio da exibição dos cabeçalhos de mensagens. O cabeçalho mostra quem enviou e o assunto da mensagem. Pode indicar também a hora e a data da mensagem, além do tamanho;
• permite que você selecione um cabeçalho de mensagem e leia o corpo da mensagem de e-mail;
• permite que você crie novas mensagens e as envie. Você digita o endereço de e-mail do destinatário e o assunto da mensagem. Em seguida, digita o corpo da mensagem;
• a maioria dos clientes de e-mail também permite que você acrescente anexos às mensagens que envia e salve os anexos das mensagens que recebe.
Clientes de e-mail sofisticados podem ter todos os tipos de enfeites e adornos e, no fundo, isso é tudo que um cliente de e-mail faz.
Um servidor de e-mail simples
Se você possui um cliente de e-mail em sua máquina, está pronto para enviar e receber e-mails. Tudo que você precisa é de um servidor de e-mail ao qual o cliente vai se conectar. Vamos imaginar como seria o servidor de e-mail mais simples possível para entendermos o básico do processo. Aí então partiremos para como a coisa funciona de verdade.
Se você leu Como funcionam os servidores Web, sabe que as máquinas na Internet podem executar aplicativos de software que atuam como servidores. Existem servidores Web, servidores FTP, servidores telnet e servidores de e-mail funcionando em milhões de máquinas na Internet neste momento. Esses aplicativos funcionam o tempo todo na máquina servidora e ficam atentos a portas específicas, esperando pessoas ou programas para conectar à porta (veja Como funcionam os servidores Web para mais detalhes). O servidor de e-mail mais simples possível funcionaria mais ou menos assim:
• ele teria uma lista de contas de e-mail, com uma conta para cada pessoa em condições de receber e-mails no servidor. Meu nome de conta poderia ser mbrain, o de João Silva poderia ser jsilva e assim por diante;
• ele teria um arquivo de texto para cada conta na lista. Assim, o servidor teria um arquivo de texto em seu diretório chamado MBRAIN.TXT, outro chamado JSILVA.TXT e assim por diante;
• se alguém quisesse enviar uma mensagem para mim, a pessoa redigiria uma mensagem de texto ("Marcos, Vamos almoçar na segunda-feira? João") em um cliente de e-mail e indicaria que a mensagem deveria ir para mbrain. Quando a pessoa pressionasse o botão Enviar, o cliente de e-mail se conectaria ao servidor de e-mail e forneceria ao servidor o nome do destinatário (mbrain), o nome do remetente (jsilva) e o corpo da mensagem;
• o servidor formataria esses fragmentos de informações e os anexaria na parte inferior do arquivo MBRAIN.TXT. A entrada no arquivo poderia ser da seguinte maneira:
De: jsilva Para: mbrain Marcos, Vamos almoçar segunda-feira? João
Para: mbrain Marcos, Vamos almoçar segunda-feira? João
Há informações que o servidor poderia salvar no arquivo, como a hora e a data de recepção e uma linha de assunto. Mas, no geral, você pode ver que esse é um processo extremamente simples.
À medida em que outras pessoas enviam e-mails para mbrain, o servidor anexa essas mensagens à parte inferior do arquivo, de acordo com a ordem de chegada. O arquivo de texto acumula uma série de 5 ou 10 mensagens até que finalmente eu faça o login para lê-las. Quando eu quiser olhar meu e-mail, meu cliente de e-mail se conecta à máquina servidora. No sistema mais simples possível, ele:
1. pede ao servidor que envie uma cópia do aquivo MBRAIN.TXT
2. pede ao servidor apagar e reiniciar o arquivo MBRAIN.TXT
3. salva o arquivo MBRAIN.TXT na minha máquina local
4. analisa o arquivo em mensagens separadas (usando a palavra "De:" como o separador)
5. mostra todos os cabeçalhos de mensagens em uma lista
Quando eu dou um clique duplo em um cabeçalho de mensagem, ele encontra a mensagem no arquivo de texto e me mostra seu conteúdo.
Você tem de admitir que esse é um sistema muito simples. Surpreendentemente, o sistema de e-mail real que você usa todos os dias não é muito mais complicado que isso.
Se você possui um cliente de e-mail em sua máquina, está pronto para enviar e receber e-mails. Tudo que você precisa é de um servidor de e-mail ao qual o cliente vai se conectar. Vamos imaginar como seria o servidor de e-mail mais simples possível para entendermos o básico do processo. Aí então partiremos para como a coisa funciona de verdade.
Se você leu Como funcionam os servidores Web, sabe que as máquinas na Internet podem executar aplicativos de software que atuam como servidores. Existem servidores Web, servidores FTP, servidores telnet e servidores de e-mail funcionando em milhões de máquinas na Internet neste momento. Esses aplicativos funcionam o tempo todo na máquina servidora e ficam atentos a portas específicas, esperando pessoas ou programas para conectar à porta (veja Como funcionam os servidores Web para mais detalhes). O servidor de e-mail mais simples possível funcionaria mais ou menos assim:
• ele teria uma lista de contas de e-mail, com uma conta para cada pessoa em condições de receber e-mails no servidor. Meu nome de conta poderia ser mbrain, o de João Silva poderia ser jsilva e assim por diante;
• ele teria um arquivo de texto para cada conta na lista. Assim, o servidor teria um arquivo de texto em seu diretório chamado MBRAIN.TXT, outro chamado JSILVA.TXT e assim por diante;
• se alguém quisesse enviar uma mensagem para mim, a pessoa redigiria uma mensagem de texto ("Marcos, Vamos almoçar na segunda-feira? João") em um cliente de e-mail e indicaria que a mensagem deveria ir para mbrain. Quando a pessoa pressionasse o botão Enviar, o cliente de e-mail se conectaria ao servidor de e-mail e forneceria ao servidor o nome do destinatário (mbrain), o nome do remetente (jsilva) e o corpo da mensagem;
• o servidor formataria esses fragmentos de informações e os anexaria na parte inferior do arquivo MBRAIN.TXT. A entrada no arquivo poderia ser da seguinte maneira:
De: jsilva Para: mbrain Marcos, Vamos almoçar segunda-feira? João
Para: mbrain Marcos, Vamos almoçar segunda-feira? João
Há informações que o servidor poderia salvar no arquivo, como a hora e a data de recepção e uma linha de assunto. Mas, no geral, você pode ver que esse é um processo extremamente simples.
À medida em que outras pessoas enviam e-mails para mbrain, o servidor anexa essas mensagens à parte inferior do arquivo, de acordo com a ordem de chegada. O arquivo de texto acumula uma série de 5 ou 10 mensagens até que finalmente eu faça o login para lê-las. Quando eu quiser olhar meu e-mail, meu cliente de e-mail se conecta à máquina servidora. No sistema mais simples possível, ele:
1. pede ao servidor que envie uma cópia do aquivo MBRAIN.TXT
2. pede ao servidor apagar e reiniciar o arquivo MBRAIN.TXT
3. salva o arquivo MBRAIN.TXT na minha máquina local
4. analisa o arquivo em mensagens separadas (usando a palavra "De:" como o separador)
5. mostra todos os cabeçalhos de mensagens em uma lista
Quando eu dou um clique duplo em um cabeçalho de mensagem, ele encontra a mensagem no arquivo de texto e me mostra seu conteúdo.
Você tem de admitir que esse é um sistema muito simples. Surpreendentemente, o sistema de e-mail real que você usa todos os dias não é muito mais complicado que isso.
Um sistema de e-mail real
O sistema de e-mail real consiste de dois servidores diferentes funcionando em uma máquina servidora. Uma é chamada de servidor SMTP, onde SMTP significa Simple Mail Transfer Protocol - protocolo de transferência de correio simples. O servidor SMTP lida com o correio enviado. O outro pode ser tanto um servidor POP3 quanto um servidor IMAP, sendo que ambos lidam com o correio recebido. POP significa Post Office Protocol - protocolo Post Office e IMAP significa Internet Mail Access Protocol - protocolo de acesso de correio internet. Um servidor de e-mail típico se parece com este:
O servidor SMTP fica atento à bem conhecida porta número 25, já o POP3 ouve a porta 110 e o IMAP usa a porta 143 (veja Como funcionam os servidores Web para mais informações sobre as portas).
O servidor SMTP
Sempre que você envia um pequeno e-mail, seu cliente de e-mail interage com o servidor SMTP para lidar com o envio. O servidor SMTP em seu hospedeiro pode ter "conversas" com outros servidores SMTP para entregar este e-mail.
Vamos supor que eu queira enviar um pequeno e-mail. Meu ID de e-mail é brain e eu tenho minha conta em howstuffworks.com. Eu quero enviar o e-mail para jsilva@mindspring.com. Estou usando um cliente de e-mail exclusivo como o Outlook Express.
Quando eu configurei minha conta em howstuffworks, eu informei ao Outlook Express o nome do servidor de correio - mail.howstuffworks.com. Quando eu redijo uma mensagem e pressiono o botão "Enviar", eis o que acontece:
1. o Outlook Express se conecta ao servidor SMTP em mail.howstuffworks.com usando a porta 25;
2. o Outlook Express estabelece uma conversa com o servidor SMTP, informando ao servidor SMTP o endereço do remetente e o endereço do destinatário, assim como o corpo da mensagem;
3. o servidor SMTP pega o endereço "para" (jsilva@mindspring.com) e o quebra em duas partes:
1. o nome do destinatário (jsilva)
2. o nome do domínio (mindspring.com)
Se o endereço "para" fosse de outro usuário também em howstuffworks.com, o servidor SMTP simplesmente entregaria a mensagem ao servidor POP3 de howstuffworks.com (usando um pequeno programa chamado o agente de entrega). Como o destinatário se encontra em outro domínio, o SMTP precisará se comunicar com aquele domínio.
4. o servidor SMTP estabelece uma conversa com um Servidor de Nomes de Domínio, ou DNS (veja Como funcionam os servidores Web para mais informações). Ele diz, "Você pode me dar o endereço IP do servidor SMTP de mindspring.com?" O DNS responde com um ou mais endereços IP para o(s) servidor(es) SMTP operados pela Mindspring;
5. o servidor SMTP em howstuffworks.com se conecta com o servidor SMTP na Mindspring usando a porta 25. Ele tem a mesma conversa de texto simples que meu cliente de e-mail teve com o servidor SMTP de HowStuffWorks e fornece a mensagem para o servidor da Mindspring. O servidor da Mindspring reconhece que o nome de domínio para jsilva se encontra em Mindspring, então ele entrega a mensagem para o servidor POP3 da Mindspring, o qual coloca a mensagem na caixa de correio de jsilva.
Se, por algum motivo, o servidor SMTP em HowStuffWorks não puder se conectar com o servidor SMTP em Mindspring, a mensagem seguirá para uma fila de espera. Na maioria das máquinas, o servidor SMTP usa um programa chamado sendmail para fazer o envio real, de modo que essa fila de espera é chamada de fila de espera de sendmail. O sendmail periodicamente tentará reenviar as mensagens de sua fila de espera, por exemplo, ele poderá tentar novamente a cada 15 minutos. Depois de quatro horas, ele lhe enviará uma pequena mensagem informando sobre algum tipo de problema. Depois de cinco dias, a maioria das configurações de sendmail desistirá e lhe retornará a mensagem informando a impossibilidade de entrega.
A conversa real que um cliente de e-mail tem com um servidor SMTP é incrivelmente simples e pode ser lida por humanos. Ela é especificada em documentos públicos chamados Solicitações de Comentários (RFC) e uma conversação típica se parece com esta:
helo test
250 mx1.mindspring.com Hello abc.sample.com
[220.57.69.37], prazer em conhecê-lo
mail de: test@sample.com
250 2.1.0 test@sample.com... Sender ok
rcpt para: jsilva@mindspring.com
250 2.1.5 jsilva... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from: test@sample.com
to:jsilva@mindspring.com
subject: testando
João, estou testando...
.
250 2.0.0 e1NMajH24604 Message accepted
for delivery
quit
221 2.0.0 mx1.mindspring.com closing connection
Connection closed by foreign host.
O que o cliente de e-mail diz está em azul e o que o servidor SMTP responde está em verde. O cliente de e-mail se apresenta, indica os endereços "de" e "para", entrega o corpo da mensagem e, em seguida, encerra a conversa. Você pode, de fato, efetuar telnet para uma máquina servidora na porta 25 e ter um desses diálogos você mesmo ( é assim que as pessoas fazem 'burlam' e-mails).
Pode-se percebecer que o servidor SMTP compreende comandos de texto muito simples como HELO, MAIL, RCPT e DATA. Os comandos mais comuns são:
• HELO - apresente-se
• EHLO - apresente-se e solicite o modo estendido
• MAIL FROM - especifique o remetente
• RCPT TO - especifique o destinatário
• DATA - especifique o corpo da mensagem (Para:, De: e Assunto: devem ser as três primeiras linhas.)
• RSET - reinicie
• QUIT - abandone a sessão
• HELP - obtenha ajuda sobre os comandos
• VRFY - verifique um endereço
• EXPN - expanda um endereço
• VERB - verbosidade
2. o Outlook Express estabelece uma conversa com o servidor SMTP, informando ao servidor SMTP o endereço do remetente e o endereço do destinatário, assim como o corpo da mensagem;
3. o servidor SMTP pega o endereço "para" (jsilva@mindspring.com) e o quebra em duas partes:
1. o nome do destinatário (jsilva)
2. o nome do domínio (mindspring.com)
Se o endereço "para" fosse de outro usuário também em howstuffworks.com, o servidor SMTP simplesmente entregaria a mensagem ao servidor POP3 de howstuffworks.com (usando um pequeno programa chamado o agente de entrega). Como o destinatário se encontra em outro domínio, o SMTP precisará se comunicar com aquele domínio.
4. o servidor SMTP estabelece uma conversa com um Servidor de Nomes de Domínio, ou DNS (veja Como funcionam os servidores Web para mais informações). Ele diz, "Você pode me dar o endereço IP do servidor SMTP de mindspring.com?" O DNS responde com um ou mais endereços IP para o(s) servidor(es) SMTP operados pela Mindspring;
5. o servidor SMTP em howstuffworks.com se conecta com o servidor SMTP na Mindspring usando a porta 25. Ele tem a mesma conversa de texto simples que meu cliente de e-mail teve com o servidor SMTP de HowStuffWorks e fornece a mensagem para o servidor da Mindspring. O servidor da Mindspring reconhece que o nome de domínio para jsilva se encontra em Mindspring, então ele entrega a mensagem para o servidor POP3 da Mindspring, o qual coloca a mensagem na caixa de correio de jsilva.
Se, por algum motivo, o servidor SMTP em HowStuffWorks não puder se conectar com o servidor SMTP em Mindspring, a mensagem seguirá para uma fila de espera. Na maioria das máquinas, o servidor SMTP usa um programa chamado sendmail para fazer o envio real, de modo que essa fila de espera é chamada de fila de espera de sendmail. O sendmail periodicamente tentará reenviar as mensagens de sua fila de espera, por exemplo, ele poderá tentar novamente a cada 15 minutos. Depois de quatro horas, ele lhe enviará uma pequena mensagem informando sobre algum tipo de problema. Depois de cinco dias, a maioria das configurações de sendmail desistirá e lhe retornará a mensagem informando a impossibilidade de entrega.
A conversa real que um cliente de e-mail tem com um servidor SMTP é incrivelmente simples e pode ser lida por humanos. Ela é especificada em documentos públicos chamados Solicitações de Comentários (RFC) e uma conversação típica se parece com esta:
helo test
250 mx1.mindspring.com Hello abc.sample.com
[220.57.69.37], prazer em conhecê-lo
mail de: test@sample.com
250 2.1.0 test@sample.com... Sender ok
rcpt para: jsilva@mindspring.com
250 2.1.5 jsilva... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from: test@sample.com
to:jsilva@mindspring.com
subject: testando
João, estou testando...
.
250 2.0.0 e1NMajH24604 Message accepted
for delivery
quit
221 2.0.0 mx1.mindspring.com closing connection
Connection closed by foreign host.
O que o cliente de e-mail diz está em azul e o que o servidor SMTP responde está em verde. O cliente de e-mail se apresenta, indica os endereços "de" e "para", entrega o corpo da mensagem e, em seguida, encerra a conversa. Você pode, de fato, efetuar telnet para uma máquina servidora na porta 25 e ter um desses diálogos você mesmo ( é assim que as pessoas fazem 'burlam' e-mails).
Pode-se percebecer que o servidor SMTP compreende comandos de texto muito simples como HELO, MAIL, RCPT e DATA. Os comandos mais comuns são:
• HELO - apresente-se
• EHLO - apresente-se e solicite o modo estendido
• MAIL FROM - especifique o remetente
• RCPT TO - especifique o destinatário
• DATA - especifique o corpo da mensagem (Para:, De: e Assunto: devem ser as três primeiras linhas.)
• RSET - reinicie
• QUIT - abandone a sessão
• HELP - obtenha ajuda sobre os comandos
• VRFY - verifique um endereço
• EXPN - expanda um endereço
• VERB - verbosidade