Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

05 - Protocolo SMTP

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

O SMTP (Simple Mail Transfer Protocol) é o protocolo padrão da Internet para o envio e transferência de mensagens de correio eletrônico entre sistemas. Padronizado na RFC 5321, ele é um protocolo de texto, orientado à conexão, que opera na camada de aplicação utilizando o TCP.

Diferente de protocolos de leitura (como POP3 ou IMAP), o SMTP é um protocolo de "Empurrar" (Push): ele é usado para mover a mensagem do remetente até o servidor do destinatário.

1. Funcionamento em Alto Nível

Uma transação SMTP típica envolve uma série de comandos e respostas entre um cliente (remetente) e um servidor (receptor).
- Porta 25: Porta padrão para transferência entre servidores (Relay).
- Porta 587: Porta padrão para submissão de mensagens por usuários (Submission).

O modelo é estritamente cliente-servidor sobre TCP. O cliente SMTP (MUA ou MSA) abre a conexão, envia os comandos em sequência, aguarda as respostas do servidor e, ao final, encerra a conexão. Cada mensagem é uma transação independente — não existe conceito de "sessão persistente" entre mensagens.

2. Comandos SMTP Essenciais

A comunicação acontece via comandos textuais terminados em CRLF (\r\n). Os principais comandos são:

Comando Função
HELO dominio Saudação antiga (RFC 821) — identifica o cliente
EHLO dominio Saudação estendida (ESMTP) — o servidor retorna capacidades
MAIL FROM: <remetente> Inicia uma transação, define o envelope do remetente
RCPT TO: <destinatario> Define o destinatário (pode haver múltiplos RCPT TO)
DATA Inicia o envio do corpo da mensagem; termina com \r\n.\r\n
QUIT Encerra a sessão SMTP
RSET Aborta a transação atual sem fechar a conexão
NOOP "No operation" — testa se o servidor responde
VRFY <usuario> Verifica se um usuário existe (geralmente desativado por segurança)
STARTTLS Solicita upgrade da conexão para TLS
AUTH <mechanismo> Autentica o cliente (PLAIN, LOGIN, CRAM-MD5, etc.)

Exemplo Prático com Telnet

$ telnet smtp.exemplo.com 25
220 smtp.exemplo.com ESMTP Postfix
EHLO cliente.local
250-smtp.exemplo.com
250-PIPELINING
250-SIZE 10240000
250-STARTTLS
250-AUTH LOGIN PLAIN
250 HELP
MAIL FROM:<remetente@exemplo.com>
250 Ok
RCPT TO:<destinatario@exemplo.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Teste SMTP
From: remetente@exemplo.com
To: destinatario@exemplo.com

Corpo da mensagem de teste.
.
250 Ok: queued as ABC123
QUIT
221 Bye

3. Códigos de Resposta

As respostas do servidor SMTP seguem um padrão de três dígitos (NDC) onde o primeiro dígito indica a classe:

Código Significado Exemplos
2xx Resposta positiva definitiva 220 (pronto), 250 (OK), 221 (fechando)
3xx Resposta positiva intermediária 354 (inicie o corpo da mensagem)
4xx Erro transitório (tente depois) 421 (servidor indisponível), 450 (caixa cheia)
5xx Erro permanente (não tente de novo) 550 (caixa inexistente), 553 (endereço inválido)

A distinção entre 4xx e 5xx é crítica para o comportamento da fila de e-mail: erros 4xx fazem o MTA tentar novamente em intervalos crescentes (5 min, 30 min, 2h, 8h...). Erros 5xx fazem o MTA devolver imediatamente a mensagem ao remetente como "bounce".

4. Estrutura do Módulo SMTP

Para dominar o funcionamento técnico do e-mail, exploraremos os seguintes tópicos:

  1. Fundamentos e Terminologia (MTA, MUA, MDA)
  2. O Fluxo de Envio e Transferência
  3. Protocolos de Acesso (POP3 e IMAP)
  4. Comandos SMTP e Códigos de Resposta

5. MIME - Multipurpose Internet Mail Extensions

O SMTP original só suportava texto ASCII de 7 bits. Isso impedia o envio de acentos, imagens, áudio e anexos binários. A solução veio com o MIME (RFC 2045-2049), que permite:

  • Codificação de caracteres: UTF-8, ISO-8859-1, etc. através do cabeçalho Content-Type: text/html; charset=UTF-8.
  • Multipartes: Mensagens com várias partes (texto + HTML + anexos) separadas por um "boundary".
  • Codificação binária: Base64 ou Quoted-Printable transformam bytes binários em caracteres ASCII seguros para o transporte SMTP.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="frontier"

--frontier
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Mensagem de teste com acentuação.

--frontier
Content-Type: application/pdf; name="doc.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="doc.pdf"

JVBERi0xLjQKMSAwIG9iago...
--frontier--

6. Fila de E-mail (Mail Queue)

Quando um MTA não consegue entregar uma mensagem (ex: servidor de destino fora do ar), ele a coloca em uma fila (queue) e tenta novamente mais tarde. O Postfix mantém a fila em /var/spool/postfix/deferred/.

  • Tentativas: Geralmente configuradas para 5 dias (RFC 5321 recomenda 4-5 dias).
  • Backoff exponencial: A cada falha, o intervalo entre tentativas cresce (15min, 30min, 1h, 2h, 4h, 8h...).
  • Bounce: Após esgotar as tentativas, o MTA gera uma mensagem de erro para o remetente informando a falha.

7. Extensões ESMTP

O comando EHLO (introduzido na RFC 1869) faz o servidor listar suas extensões:

  • 8BITMIME — Suporta 8 bits no corpo (sem codificação MIME).
  • SIZE <n> — Limita o tamanho máximo da mensagem.
  • STARTTLS — Permite upgrade para TLS.
  • AUTH — Mecanismos de autenticação suportados.
  • PIPELINING — Cliente pode enviar vários comandos sem aguardar resposta.
  • DSN — Delivery Status Notifications (confirmação de entrega).

8. Segurança e Autenticação

O SMTP original não tinha autenticação — qualquer um podia enviar e-mail para qualquer servidor, o que facilitou o spam massivo a partir dos anos 1990. As extensões modernas corrigem isso:

  • SMTP AUTH (RFC 4954): Cliente deve se autenticar (LOGIN, PLAIN, CRAM-MD5) antes de enviar.
  • STARTTLS (RFC 3207): Upgrade da conexão para TLS, cifrando todo o tráfego.
  • SPF/DKIM/DMARC: Mecanismos de validação de domínio que reduzem spoofing e phishing.

Important

O SMTP original não possuía mecanismos de criptografia ou autenticação fortes. Hoje, utilizamos o ESMTP (Extended SMTP) com comandos como STARTTLS e AUTH para garantir a segurança das comunicações.

9. Resumo Técnico

Atributo Valor
RFC atual 5321 (2008)
Transporte TCP
Portas 25 (relay), 587 (submission), 465 (SMTPS)
Tipo Push, baseado em texto
Extensão ESMTP (EHLO + extensões)
Códigos de resposta 2xx/3xx/4xx/5xx
Anexos MIME (RFC 2045)
Segurança STARTTLS, AUTH, SPF, DKIM, DMARC

10. Conclusão

O SMTP é um protocolo resiliente que sobrevive há mais de 40 anos. Apesar da simplicidade do seu modelo — comandos textuais sobre TCP — suas extensões ESMTP, MIME e STARTTLS o tornaram capaz de transportar bilhões de mensagens diárias com anexos binários, autenticação e criptografia. Entender os comandos, códigos de resposta e a fila de e-mail é fundamental para qualquer engenheiro que opere servidores de correio.