Compreendendo o SMTP – O Protocolo por Trás da Entrega de Emails

On maio 29, 2023
10min read
Diana Lepilkina Content Specialist @Mailtrap
This is a cover image for an article that explains SMTP Protocol in detail

O SMTP é um protocolo fundamental usado na comunicação de emails. Muito provavelmente, está por trás dos emails que enviamos e recebemos todos os dias. Embora seja um protocolo simples, ele ainda envolve múltiplos componentes e muitos detalhes.

Neste post do blog, vamos dar uma olhada mais detalhada no SMTP e explorar seus principais recursos e funcionalidades.

O que é SMTP?

SMTP ou Simple Mail Transfer Protocol é um protocolo de camada de aplicação que possibilita a transferência de emails entre diferentes servidores e redes de computadores. Ele faz isso definindo as regras de comunicação.

O modelo original foi introduzido em 1982. Segundo o RFC 821, o usuário cria a solicitação de conexão. Em resposta, o remetente-SMTP inicia uma conexão bidirecional com o receptor-SMTP. Em termos modernos, esses são o cliente SMTP e o servidor SMTP, respectivamente. O cliente SMTP e o servidor SMTP se comunicam com comandos e respostas (mais sobre isso depois), semelhante a conversas na vida real.

O RFC 821 também definiu o modelo para uso do SMTP. Você pode ver o esquema na ilustração abaixo.

Diagrama explicando o uso do SMTP

Uma vez estabelecida a conexão, o cliente SMTP transferirá cabeçalhos, destinatários, mensagens (incluindo anexos) e todos os dados para o servidor SMTP passo a passo. Quando a transmissão estiver completa, a conexão será fechada.

Por definição, a forma completa do SMTP é quando os clientes SMTP suportam retransmissão, filas de email e funções de endereço alternativo. Isso é chamado de SMTP totalmente capaz. Se essas funções não forem suportadas, o SMTP não é totalmente capaz. Nesse caso, os RFCs relevantes recomendam usar o protocolo de envio de mensagens.

Lembre-se de que o SMTP só pode enviar mensagens simples, ou seja, texto simples sem anexos. Usamos um protocolo separado, Multipurpose Internet Mail Extensions, MIME (RFC 2045), para enviar anexos, corpos de mensagens que excedem os limites de caracteres impostos pelo SMTP, mensagens em idiomas diferentes do inglês e formatos HTML/CSS.

MIME é um protocolo de extensão – ele aprimora as capacidades do SMTP, mas não opera separadamente. A maioria dos serviços de email modernos suporta MIME.

O que é ESMTP?

ESMTP ou Extended Simple Mail Transfer Protocol foi introduzido pela primeira vez em 1995 no RFC 1869. O objetivo era criar uma estrutura unificada para todas as extensões futuras. As extensões visam adicionar funcionalidades que o SMTP não possui por padrão. O RFC 5321 consolidou e obsoletou documentos anteriores.

O ESMTP usa um novo comando EHLO para iniciar a conexão. Ele também permite o uso de parâmetros adicionais nos comandos MAIL FROM e RCPT TO do SMTP. Como resultado, o ESMTP remove o limite de 512 caracteres para parâmetros adicionais e o deixa apenas para casos em que os parâmetros adicionais não são definidos.

Tanto o ESMTP quanto o SMTP são amplamente usados hoje. Se o comando EHLO não for suportado, a conexão deve reverter para o SMTP e seu comando HELO.

Falando em extensões, também devemos mencionar a extensão SMTP-AUTH, que adiciona uma etapa de autenticação ao processo. Isso significa que o cliente de email deve fazer login no servidor de email usando seu nome de usuário e senha. Embora a autenticação SMTP não possa proteger contra spoofing, é uma medida de segurança importante.

O que é SMTPS?

SMTPS ou Simple Mail Transfer Protocol Secure é um método que protege o SMTP com a ajuda dos protocolos Transport Layer Security (TLS) ou Secure Sockets Layer (SSL). Essas camadas de segurança criptografam mensagens para impedir que spammers ou spoofers visualizem o conteúdo dos emails.

Embora o SSL ainda seja amplamente usado, o TLS (mais precisamente, sua versão 1.3) é considerado o protocolo mais seguro para criptografia de emails. Para mais informações sobre a segurança do SMTP, leia nosso post dedicado no blog.

Tipos de SMTP

O RFC 5321 diferencia entre quatro tipos de sistemas SMTP:

  • SMTP de Origem é o primeiro sistema que interage com a internet ao introduzir o email;
  • SMTP de Entrega é o sistema que recebe emails da internet e os entrega aos destinatários;
  • Relay SMTP retransmite emails entre servidores SMTP ou MTAs (mais sobre o significado do agente de transferência abaixo) sem modificar a mensagem de qualquer maneira;
  • SMTP Gateway ou gateway SMTP também transfere emails entre diferentes servidores, mas, ao contrário da retransmissão SMTP, pode transformar a mensagem se necessário. Gateways SMTP são geralmente firewalls que reescrevem endereços ou servidores SMTP intermediários.

Infraestrutura do SMTP

Como vimos acima, os principais componentes do modelo SMTP são o Usuário, Remetente-SMTP (cliente SMTP) e Receptor-SMTP (servidor SMTP). No entanto, agentes de email também participam do processo de envio e recebimento de emails. Além disso, o modelo SMTP inclui relay SMTP em cenários específicos. Vamos ver o que cada um deles significa e qual função eles têm.

Diagrama da infraestrutura SMTP

Servidor SMTP

O servidor SMTP é uma aplicação para enviar emails. Ele recebe mensagens eletrônicas de clientes de email (Gmail, Yahoo! Apple Mail, AOL, etc.) e as transfere para outros servidores. Esses podem ser outros servidores SMTP ou um servidor de email de entrada.

O servidor de email SMTP pode ser local ou baseado na nuvem. Um servidor SMTP local é uma boa opção para aqueles que não querem depender de servidores de terceiros. Por outro lado, um servidor SMTP hospedado na nuvem requer menos esforço e pode ser mais seguro na maioria dos casos.

Agentes de Email

Existem quatro agentes principais:

  • MUA (Mail User Agent) é o cliente de email que mencionamos acima. É um aplicativo ou site que você usa para enviar e receber mensagens de email.
  • MSA (Mail Submission Agent) recebe emails do cliente de email, verifica seus cabeçalhos e verifica se os endereços estão indicados corretamente.
  • MTA (Mail Transfer Agent) é um programa de envio de email que processa e transfere emails. Ele recebe mensagens do MSA. A maioria dos MTAs modernos assume as responsabilidades do MSA. Nesse caso, a transferência de mensagens não incluirá MSAs. Os MTAs mais populares são Sendmail, Postfix e Exim.
  • MDA (Mail Delivery Agent) é o agente final antes que seus emails sejam entregues ao servidor SMTP do destinatário e, em seguida, recuperados através de servidores de email de entrada (IMAP ou POP3).

Note que as linhas entre as responsabilidades dos agentes podem ser esfumadas às vezes, mas ainda são úteis para fins ilustrativos. No mundo real, MUAs, MTAs e servidores SMTP são os componentes mais essenciais da entrega de email.

Relay SMTP

O relay SMTP é o processo de transmitir emails entre servidores SMTP hospedados em diferentes domínios (de @gmail.com para @yahoo.com, por exemplo).

Os MTAs verificam se os nomes de domínio são os mesmos. Se forem, o relay SMTP não ocorrerá. Mas se os domínios não forem os mesmos, os MTAs consultarão os registros do Sistema de Nomes de Domínio (DNS) para encontrar o endereço IP do domínio do destinatário. Uma vez localizado o IP, eles encaminharão a mensagem entre um ou vários MTAs (relay SMTP) até que ela seja finalmente entregue ao servidor SMTP do destinatário.

Como funciona o SMTP?

Uma sessão SMTP começa quando o cliente abre uma conexão Transmission Control Protocol (TCP, às vezes chamada de TCP/IP) com o servidor SMTP. O servidor responde com uma mensagem de abertura, expressa com o código 250. Esse processo é frequentemente chamado de handshake SMTP.

O cliente então envia um comando HELO (EHLO para ESMTP) e se identifica. Geralmente, segue o comando com o nome do domínio ou endereço IP. Em termos não técnicos, o cliente diz: “Olá, meu nome é John Cliente, estou enviando um email do gmail.com e meu IP é 192.0.2.0”. O servidor responderá com o código 250 novamente.

Servidor SMTP enviando comando HELO ao cliente SMTP

Depois disso, a etapa de transferência de email começará. O conteúdo do email será transferido passo a passo com os comandos MAIL FROM (john@gmail.com), RCPT TO (oliver@yahoo.com) e DATA (‘Oi, como você tem estado?’). Se o servidor aceitar a transação, o cliente transferirá os cabeçalhos de email. É necessário usar um indicador de fim de linha (ponto ‘.’) uma vez que tudo tenha sido transmitido.

Conexão SMTP

O servidor responderá com o código 250 se a transação for bem-sucedida. O cliente iniciará a terminação da conexão SMTP com o comando QUIT, e o servidor fechará o canal de transmissão com o código 221.

Este é, claro, um exemplo simplificado sem relay SMTP, encaminhamento, gateways ou códigos de erro. Para mais informações sobre esses, consulte o RFC 5321.

E quanto à fila SMTP?

A fila SMTP é um conjunto de emails que estão esperando para serem entregues. Os emails geralmente são colocados na fila quando o servidor SMTP de recebimento não está pronto para aceitar emails, ou você está enviando grandes volumes de uma vez. Quando o servidor responde, os emails serão entregues um por um. A fila SMTP é uma espécie de buffer entre você e o servidor de recebimento.

Comandos e respostas SMTP

Mencionamos alguns dos comandos e respostas SMTP no exemplo acima. Mas, ao enviar emails com SMTP, você pode encontrar outros comandos e respostas.

Em geral, os comandos são strings de caracteres alfabéticos terminando com <CRLF>. Se parâmetros adicionais seguirem, os caracteres serão terminados por <SP>. 

Respostas são códigos de conclusão numéricos que podem ser positivos ou negativos. Normalmente, são seguidos por uma string de texto.

Comandos e respostas são compostos por um conjunto de caracteres ASCII.

Comandos

  • HELO/EHLO – inicia o início da sessão SMTP.

Syntax: "EHLO" SP ( Domain / address-literal ) CRLF ou "HELO" SP Domain CRLF

  • MAIL FROM – inicia a transação de email e inclui o caminho reverso e às vezes parâmetros opcionais.

Syntax: MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF>

  • RCPT TO – indica o(s) destinatário(s) e inclui o endereço de email deles (também conhecido como caminho direto) como argumento.

Syntax: RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF>

  • DATA – pede permissão ao servidor para transferir dados e o faz uma vez que recebe uma resposta positiva.

Syntax:  "DATA" CRLF

  • VRFY – pede ao servidor para verificar se a caixa de correio no argumento existe no host local.

Syntax: "VRFY" SP String CRLF

  • EXPN – faz o mesmo que VRFY, mas para a lista de emails.

Syntax: "EXPN" SP String CRLF

  • NOOP – verifica a capacidade do servidor de responder.

Syntax: "NOOP" [ SP String ] CRLF

  • QUIT – inicia a terminação da conexão

Syntax: "QUIT" CRLF

  • HELP – pede ao servidor para verificar quais comandos ele suporta. Pode incluir um comando específico como argumento.

Syntax: "HELP" [ SP String ] CRLF

  • RSET – redefine a conexão SMTP e apaga todos os buffers e tabelas de estado. A conexão SMTP será revertida para o estado inicial.

Syntax: "RSET" CRLF

O protocolo SMTP também pode suportar alguns comandos ESMTP, como STARTTLS, AUTH e outros.

Respostas 

Respostas positivas comuns

  • 250 – a ação solicitada está OK ou concluída
  • 211 – status do sistema ou resposta ao HELP
  • 220 – <domain> o serviço está pronto 
  • 221 – <domain> fechando o canal de transmissão
  • 354 – início da entrada de email (geralmente responde ao comando DATA)

Respostas negativas ou códigos de erro

  • 500 – erro de sintaxe ou comando não pôde ser reconhecido
  • 503 – sequência de comandos incorreta
  • 252 – o servidor não consegue verificar o usuário. Ele ainda aceitará a mensagem e tentará a entrega (responde ao comando VRFY)
  • 450 – caixa de correio indisponível
  • 510 – endereço de email inválido

Portas SMTP

Portas SMTP são endpoints de comunicação que ajudam a identificar a localização exata dos endereços da internet. As portas mais comuns usadas com SMTP são 25, 465, 587 e 2525.

  • 25 é a porta SMTP mais antiga, mas usá-la para envio de email não é mais comum. Como não possui mecanismos de segurança, spammers a abusam pesadamente. Por esse motivo, os provedores de serviços de internet (ISPs) geralmente bloqueiam o número da porta 25. É recomendável usá-la apenas como uma porta de retransmissão (ou relay).
  • 465 é mais segura em comparação com 25, mas não é uma porta SMTP oficial e agora está obsoleta. Ela suporta criptografia SSL. Ainda assim, é recomendável evitar seu uso sempre que possível.
  • 587 é a porta SMTP padrão recomendada com STARTTLS. Quase todos os provedores de serviços de email a suportam.
  • 2525 é uma alternativa à 587. Pode ser usada quando 587 está bloqueada ou indisponível. 2525 nunca foi reconhecida como uma porta SMTP oficial. Independentemente disso, a maioria dos ISPs permite transações através desta porta.

Comparando SMTP, IMAP e POP3

Além do SMTP, os protocolos de email mais comuns são IMAP e POP3. O SMTP é um servidor de email de saída usado para enviar e entregar emails. IMAP e POP3 são protocolos de acesso a mensagens usados para recuperar mensagens recebidas do servidor de email.

IMAP é um Protocolo de Acesso a Mensagens da Internet que se conecta ao servidor e baixa mensagens sob demanda. As mensagens não serão excluídas uma vez que a conexão seja terminada. Com o IMAP, os usuários podem acessar seus emails de qualquer computador ou dispositivo.

POP3 ou Protocolo de Agência dos Correios 3 também se conecta ao servidor, mas baixa todas as mensagens recebidas. Uma vez que isso é concluído, ele excluirá todos os emails do servidor. Ao contrário do IMAP, o POP3 é dependente do dispositivo.

Diferenças entre IMAP, POP3 e SMTP

Mais informações sobre as diferenças entre esses protocolos estão disponíveis aqui bem como em nosso vídeo dedicado.

Como enviar emails com SMTP

Um dos principais benefícios do SMTP é que ele facilita o envio de emails a partir de diferentes aplicativos ou dispositivos. A maioria das linguagens de programação permite que os usuários encaminhem emails de saída por meio do SMTP, seja nativamente ou com a ajuda de diferentes bibliotecas. Ao contrário da Web API (ou API de Email), a integração do SMTP não requer habilidades avançadas de codificação.

Você precisará de credenciais SMTP funcionais (como host, porta, nome de usuário, senha e criptografia) e a linguagem de programação relevante para completar essa tarefa. Você pode conferir nosso post recente no blog para mais detalhes sobre isso.

Serviço SMTP – testar e enviar emails

SMTP (ou, mais precisamente, servidor SMTP) é fornecido aos usuários como um serviço para dois principais propósitos – teste e envio.

Em termos de teste, serviço SMTP implica em um servidor SMTP falso que captura emails de saída. Dessa forma, os emails não chegam a caixas de entrada reais, criando um ambiente seguro para testes.

Quando se trata de envio de email, o serviço SMTP é sinônimo de serviço de relay SMTP. Os provedores de email têm seus próprios servidores SMTP que permitem aos usuários enviar emails de marketing ou transacionais.

Idealmente, esses dois serviços SMTP podem ser combinados em uma ferramenta robusta, como o Mailtrap.

Mailtrap é uma Plataforma de Email Delivery que combina Email Testing e Email API/SMTP. É uma infraestrutura completa de email que permite aos usuários testar o servidor SMTP, enviar emails com ele e monitorar seu desempenho com análises acionáveis.

O Email Testing é um Sandbox que captura todo o tráfego SMTP em uma caixa de entrada virtual e elimina as chances de spamming aos usuários. Você pode facilmente inspecionar e depurar seus emails em staging com verificações HTML/CSS ou de spam, visualizar informações técnicas ou usar recursos de encaminhamento manual/automático. Email Testing fornece várias caixas de entrada para diferentes projetos e estágios de produto.

Caixa de entrada do Email Testing do Mailtrap

Email API/SMTP é uma infraestrutura com altas taxas de entregabilidade de email por design. Com seu Email API e serviço SMTP, a integração é suave e sem esforço. Tudo o que você precisa fazer é verificar seu domínio e escolher o método preferido de integração. Uma vez feito isso, você pode alcançar as caixas de entrada dos destinatários em questão de segundos.

Email API/SMTP também possui análises aprofundadas e práticas com relatórios detalhados e painéis de visão geral que mantêm você no controle das suas métricas de entregabilidade.

Article by Diana Lepilkina Content Specialist @Mailtrap