- Atualizado em
O que é SMTP: Entendendo o Protocolo de Email Essencial
- Autores
- Nome
- Henrico Piubello
- @henricop
Especialista de TI - Grupo Voitto
O email é uma tecnologia que existe desde os primeiros dias da Internet e era uma das aplicações mais populares em seus estágios iniciais [Segaller, 1998]. Com o tempo, o email evoluiu consideravelmente, tornando-se uma das aplicações mais essenciais e amplamente utilizadas na Internet.
Semelhante ao correio convencional, o email é uma forma de comunicação assíncrona, permitindo que as pessoas enviem e recebam mensagens em horários convenientes, sem a necessidade de sincronização com os destinatários.
No entanto, o email eletrônico se destaca por sua rapidez, facilidade de distribuição e custo acessível em comparação com o correio tradicional. As modernas plataformas de email incluem recursos avançados, como anexos, hiperlinks, formatação em HTML e imagens incorporadas.
A Figura acima ilustra o sistema de email da Internet. A partir desse diagrama, podemos identificar três componentes fundamentais:
- Agentes de usuário
- Servidores de email
- Protocolo SMTP (Simple Mail Transfer Protocol)
Vamos agora descrever cada um deles no contexto de uma situação em que a remetente, Renata, envia uma mensagem de email para o destinatário, Henrico.
Os agentes de usuário são aplicativos que permitem aos usuários ler, responder, encaminhar, salvar e criar mensagens. Exemplos desses agentes incluem o Microsoft Outlook e o Apple Mail.
Quando Renata conclui a composição de sua mensagem, seu agente de usuário encaminha a mensagem para seu servidor de email, onde a mensagem é enfileirada nas mensagens de saída. Quando Henrico deseja ler a mensagem, seu agente de usuário recupera a mensagem da sua caixa de correio no servidor de email.
Os servidores de correio desempenham um papel fundamental na infraestrutura do email. Cada destinatário, como Henrico, possui uma caixa postal hospedada em um desses servidores.
A caixa postal de Henrico é responsável por receber, armazenar e gerenciar as mensagens que foram enviadas para ele. O ciclo de vida típico de uma mensagem começa no agente de usuário do remetente, passa pelo servidor de correio do remetente e é encaminhada para o servidor de correio do destinatário, onde é depositada na caixa postal de Henrico.
Quando Henrico deseja acessar as mensagens de sua caixa postal, o servidor de correio que abriga sua caixa postal autentica sua identidade por meio de um nome de usuário e senha.
O servidor de correio de Renata também lida com a possibilidade de falhas no servidor de correio de Henrico. Se o servidor de correio de Renata não puder entregar a correspondência a Henrico, ele retém a mensagem em uma fila de mensagens e tenta transferi-la posteriormente.
Geralmente, novas tentativas são feitas a cada 30 minutos aproximadamente. Se não houver sucesso após vários dias, o servidor de correio remove a mensagem e notifica o remetente, Renata, por meio de uma mensagem de correio.
O que é o protocolo SMTP?
O SMTP, Protocolo Simples de Transferência de Correio, é o principal protocolo de camada de aplicação utilizado no email da Internet.
O SMTP faz uso do serviço de transferência de dados confiável fornecido pelo TCP para transmitir as mensagens do servidor de correio do remetente para o servidor de correio do destinatário.
Como a maioria dos protocolos de camada de aplicação, o SMTP opera em dois lados: o lado cliente, que funciona no servidor de correio do remetente, e o lado servidor, que opera no servidor de correio do destinatário.
Ambos os lados são implementados em todos os servidores de correio. Quando um servidor de correio envia correspondência para outros servidores, atua como um cliente SMTP, enquanto, ao receber correspondência de outros servidores, atua como um servidor SMTP.
O protocolo SMTP, como definido no RFC 5321, desempenha um papel central no sistema de correio eletrônico da Internet.
Esse protocolo é responsável por transferir mensagens dos servidores de correio remetentes para os servidores de correio destinatários. Notavelmente, o SMTP é consideravelmente mais antigo que o HTTP, com o RFC original do SMTP datando de 1982, embora sua existência seja anterior a essa data.
Apesar de suas qualidades notáveis e sua onipresença na Internet, o SMTP é uma tecnologia antiga que possui algumas características antiquadas.
Uma dessas características é a restrição que o SMTP impõe ao corpo de todas as mensagens de correio, limitando-as ao formato ASCII de 7 bits, não se limitando apenas ao cabeçalho.
Essa restrição fazia sentido nas primeiras décadas de 1980, quando a largura de banda era limitada, e o envio de emails com anexos volumosos ou arquivos multimídia extensos, como imagens, áudio ou vídeo, era incomum.
No entanto, na era contemporânea da multimídia, essa restrição do ASCII de 7 bits tornou-se incômoda, exigindo a codificação de dados binários de multimídia em ASCII antes do envio via SMTP e posterior decodificação para o formato binário original após o transporte pelo SMTP.
Isso contrasta com o HTTP, conforme mencionado na Seção 2.2, que não requer a codificação de dados de multimídia em ASCII antes da transferência.
Para ilustrar o funcionamento básico do SMTP, consideremos um cenário comum. Suponhamos que Renata deseja enviar a Henrico uma mensagem ASCII simples:
- Renata inicia seu cliente de email, fornece o endereço de Henrico (por exemplo,
henrico@codecrush.com.br
), redige a mensagem e instrui o cliente de email a enviá-la. - O cliente de email de Renata envia a mensagem para o servidor de correio dela, onde a mensagem é enfileirada.
- O lado cliente do SMTP, localizado no servidor de correio de Renata, detecta a mensagem na fila e estabelece uma conexão TCP com o servidor SMTP de Henrico, que está no servidor de correio de Henrico.
- Após uma série de procedimentos iniciais (handshaking), o cliente SMTP envia a mensagem de Renata por meio da conexão TCP.
- No servidor de correio de Henrico, o lado servidor do SMTP recebe a mensagem e a coloca na caixa postal de Henrico.
- Henrico acessa a mensagem em sua caixa postal quando for conveniente para ele, por meio de seu cliente de email.
Esse cenário é esquematizado na Figura abaixo:
É importante notar que, em geral, o SMTP não faz uso de servidores de correio intermediários para encaminhar mensagens, mesmo quando os servidores de correio estão geograficamente distantes.
Por exemplo, se o servidor de correio de Renata estiver em Hong Kong e o de Henrico em St. Louis, a conexão TCP é estabelecida diretamente entre esses dois servidores.
Se o servidor de correio de Henrico estiver inativo, a mensagem permanece no servidor de correio de Renata, aguardando uma nova tentativa, sem ser encaminhada para qualquer servidor de correio intermediário.
Agora, vamos examinar em detalhes como o SMTP efetua a transferência de mensagens de um servidor de correio remetente para um servidor de correio destinatário.
Veremos que o protocolo SMTP possui muitas semelhanças com os protocolos utilizados em interações cara a cara. O processo se inicia quando o cliente SMTP, que opera no hospedeiro do servidor de correio remetente, estabelece uma conexão TCP na porta 25 com o servidor SMTP, que está no hospedeiro do servidor de correio destinatário.
Caso o servidor não esteja disponível, o cliente tentará novamente posteriormente. Uma vez estabelecida a conexão, o servidor e o cliente realizam algumas etapas de apresentação de camada de aplicação, de modo semelhante a como as pessoas se apresentam antes de compartilhar informações.
Clientes e servidores SMTP se apresentam trocando informações durante essa fase. Durante essa troca, o cliente SMTP especifica os endereços de e-mail do remetente (a pessoa que gerou a mensagem) e do destinatário.
Após a conclusão das apresentações, o cliente envia a mensagem. O SMTP pode confiar no serviço de transferência de dados confiável fornecido pelo TCP para entregar a mensagem ao servidor de destino sem erros.
Posteriormente, o cliente pode repetir esse processo, usando a mesma conexão TCP, se houver outras mensagens a serem enviadas ao servidor. Caso contrário, o cliente instrui o TCP a encerrar a conexão.
Vamos agora analisar um exemplo de troca de mensagens entre um cliente (C) e um servidor SMTP (S). O hospedeiro do cliente é denominado crepes.fr
, e o hospedeiro do servidor é hamburger.edu
.
As linhas de texto ASCII precedidas por "C:" representam as linhas que o cliente envia através de seu socket TCP, enquanto aquelas precedidas por "S:" representam as linhas que o servidor envia através de seu socket TCP.
A transcrição começa imediatamente após o estabelecimento da conexão TCP:
S: 220 hamburger.edu
C: HELO crepes.fr
S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: <Renata@crepes.fr>
S: 250 Renata@crepes.fr ... Sender ok
C: RCPT TO: <Henrico@hamburger.edu>
S: 250 Henrico@hamburger.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with a line containing only "."
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection
Nesse exemplo, o cliente enviou uma mensagem ("Do you like ketchup? How about pickles?") do servidor de correio crepes.fr
para o servidor de correio hamburger.edu
.
Como parte dessa interação, o cliente emitiu cinco comandos: HELO
(abreviação de HELLO), MAIL FROM
, RCPT TO
, DATA
e QUIT
, que são autoexplicativos.
Além disso, o cliente enviou uma linha contendo um único ponto (.)
para indicar o término da mensagem para o servidor. Cada mensagem termina com CRLF.CRLF
, em que CR
representa "carriage return" e LF
representa "line feed", de acordo com o jargão ASCII.
O servidor responde a cada comando com uma mensagem de resposta contendo um código e, opcionalmente, explicações em inglês. É importante observar que o SMTP faz uso de conexões persistentes, o que significa que, se o servidor de correio remetente tiver várias mensagens para enviar ao mesmo servidor de correio destinatário, todas essas mensagens podem ser enviadas através da mesma conexão TCP.
Para cada nova mensagem, o cliente inicia o processo com um novo comando MAIL FROM
(indicando o remetente), encerra a mensagem com um único ponto (.)
e só emite o comando QUIT
após todas as mensagens terem sido enviadas.
Recomendamos fortemente o uso do Telnet para realizar um diálogo direto com um servidor SMTP. Para fazer isso, basta digitar:
telnet serverName 25
Onde "serverName" é o nome de um servidor de correio local. Essa ação estabelece uma conexão TCP direta entre seu hospedeiro local e o servidor de correio.
Após inserir essa linha, você deverá receber imediatamente uma resposta do servidor com o código 220
.
Em seguida, digite os comandos HELO
, MAIL FROM
, RCPT TO
, DATA
, CRLF. CRLF
e QUIT
nos momentos apropriados.
Também recomendamos a realização da Tarefa de Programação 2 no final deste capítulo, na qual você construirá um cliente SMTP simples para enviar mensagens de e-mail a um destinatário por meio de um servidor de correio local.
A Importância dos Testes no Universo da Programação e Tecnologia
Descubra por que os testes desempenham um papel crucial no desenvolvimento de software e como implementá-los com eficácia. Leia nosso artigo sobre testes na programação e tecnologia
Leia maisGerenciamento de Projetos, Programas e Portfólios: Entendendo as Fundamentais
Descubra a interconexão de projetos, programas e portfólios e seu papel no planejamento estratégico.
Leia mais