Lista de Todos os Comandos SMTP e Códigos de Resposta

On junho 25, 2024
9min read
Zakhar Yung Technical Content Writer @Mailtrap

No post do blog SMTP vs. IMAP vs. POP3, explicamos que uma sessão SMTP é uma espécie de conversa entre um cliente SMTP e um servidor SMTP. O cliente se comunica usando comandos que consistem em caracteres alfabéticos. O servidor responde com códigos numéricos. Hoje, vamos abordar isso em detalhes. Você conhecerá os comandos SMTP válidos e os obsoletos. Além disso, esclareceremos quais códigos de resposta correspondem a cada comando.

Comandos SMTP essenciais na ordem em que podem ser usados

Cada comando SMTP define uma função particular dentro da sessão SMTP, que consiste em três etapas:

  • handshake – estabelecimento de uma conexão TCP
  • email transfer – manipulações com o email
  • termination – encerramento de uma conexão TCP

Portanto, decidimos listar os comandos SMTP de acordo com esse fluxo.

HELO/EHLO

O comando HELO inicia a conversa da sessão SMTP. O cliente cumprimenta o servidor e se apresenta. Como regra, HELO é atribuído a um argumento que especifica o nome do domínio ou endereço IP do cliente SMTP.

Exemplo: HELO client.net

EHLO é uma alternativa para HELO para servidores que suportam as extensões do serviço SMTP (ESMTP). Se o servidor não suportar ESMTP, ele responderá com um erro.

Exemplo: EHLO client.net

Em qualquer caso, HELO ou EHLO é um comando OBRIGATÓRIO para o cliente SMTP iniciar uma transferência de email (ou email transfer).

MAIL FROM

O comando MAIL FROM inicia uma transferência de email. Como argumento, MAIL FROM inclui uma caixa de correio do remetente (reverse-path). Para alguns tipos de mensagens de relatório, como notificações de não entrega, o reverse-path pode estar vazio. Parâmetros opcionais também podem ser especificados.

Exemplo: MAIL FROM "teste@cliente.net"

RCPT TO

O comando RCPT TO especifica o destinatário. Como argumento, RCPT TO inclui uma caixa de correio de destino (forward-path). Em caso de vários destinatários, RCPT TO será usado para especificar cada destinatário separadamente.

Exemplo: RCPT TO "usuario@destinatario.net"

DATA

Com o comando DATA, o cliente pede permissão ao servidor para transferir os dados do email. O código de resposta 354 concede permissão, e o cliente inicia a entrega do conteúdo do email linha por linha. Isso inclui a data, cabeçalho do remetente, linha de assunto, cabeçalho para, anexos e texto do corpo.

Uma linha final contendo um ponto (“.`”) termina a transferência dos dados do email. O servidor responde à linha final.

Exemplo:
DATA
354 (código de resposta do servidor)
Date: Qua, 30 Julho 2019 06:04:34
From: teste@cliente.net
Subject: Como SMTP funciona
To: usuario@destinatario.net
Body: texto
.

NOOP

O comando NOOP é usado apenas para verificar se o servidor pode responder. Resposta “250 OK”

Exemplo: NOOP

HELP

Com o comando HELP, o cliente solicita uma lista de comandos que o servidor suporta. HELP pode ser usado com um argumento (um comando específico). Se o servidor suportar isso, ele fornecerá as informações de acordo com esta solicitação.

Exemplo: HELP 

VRFY e EXPN

VRFY é usado para verificar se uma caixa de correio no argumento existe no host local. A resposta do servidor inclui a caixa de correio do usuário e pode incluir o nome completo do usuário.

Exemplo:
VRFY usuario2
250 Samantha Smith usuario2@cliente.net (resposta do servidor)

EXPN é usado para verificar se uma lista de distribuição no argumento existe no host local. A resposta positiva especificará a associação dos destinatários.

Exemplo:
EXPN mail-list
250-usuario1@cliente.net (resposta do servidor)
250-usuario2@cliente.net (resposta do servidor)
250-usuario3@cliente.net (resposta do servidor)

O hífen (-) entre o código numérico e a caixa de correio do usuário indica que a resposta continua na próxima linha.

VRFY e EXPN implementam a autenticação SMTP. Além disso, são úteis para realizar uma auditoria interna do servidor. Por outro lado, esses comandos são considerados um risco de segurança. Spammers podem usá-los para coletar endereços de email válidos do servidor. Portanto, os sistemas de mensagens instalam proteções correspondentes ou desativam os comandos.

RSET

O comando RSET redefine a conexão SMTP para o estado inicial. Ele apaga todos os buffers e tabelas de estado (tanto do remetente quanto do destinatário). RSET recebe apenas a resposta positiva do servidor – 250. Ao mesmo tempo, a conexão SMTP permanece aberta e está pronta para uma nova transação de email.

Exemplo: RSET

QUIT

O comando QUIT envia a solicitação para terminar a sessão SMTP. Uma vez que o servidor responde com 221, o cliente fecha a conexão SMTP. Este comando especifica que o receptor DEVE enviar uma resposta “221 OK” e, em seguida, fechar o canal de transmissão.

Exemplo: QUIT

Comandos SMTP alargados que alguns servidores SMTP podem suportar

STARTTLS 

O comando STARTTLS é usado para iniciar um handshake TLS para uma sessão SMTP segura. STARTTLS redefine o protocolo SMTP para o estado inicial. Uma vez recebida a resposta 220 do servidor, o cliente SMTP deve enviar HELO ou EHLO para iniciar a sessão. Em caso de resposta negativa (454), o cliente deve decidir se continua ou não a sessão SMTP.

Exemplo: STARTTLS

AUTH

O comando AUTH é usado para autenticar o cliente no servidor. Para isso, ele usa um argumento que especifica diferentes níveis de segurança e métodos de login: PLAIN, LOGIN e CRAM-MD5. A sessão é considerada autenticada uma vez que o servidor forneceu uma resposta positiva. Para mais informações sobre isso, leia o post do blog sobre autenticação SMTP.

Exemplo: AUTH CRAM-MD5

ATRN 

O comando ATRN substituiu o comando obsoleto TURN. Ele era usado para reverter a conexão entre os servidores SMTP local e externo (remetente e destinatário). TURN não tinha autenticação e, portanto, foi descontinuado. ATRN está livre dessa desvantagem. Além disso, está disponível para endereços IP atribuídos dinamicamente.

Exemplo:

ATRN cliente.net,cliente.com

250 OK now reversing the connection (resposta do servidor)

BDAT

O comando BDAT é usado para enviar o conteúdo do email. Pode ser uma alternativa ao comando DATA. BDAT tem dois argumentos. O primeiro define o comprimento do bloco de dados em octetos. O segundo indica que o bloco de dados está terminando. Não é necessário um ponto para terminar a transferência de email como no comando DATA. BDAT é amplamente usado no Microsoft Exchange Server. Ao mesmo tempo, DATA é um comando obrigatório para todos os servidores.

Exemplo:
BDAT 67 LAST
To: usuario@destinatario.net
From: teste@cliente.net
Subject: Como SMTP funciona
250 Message OK, 67 octets received (resposta do servidor)

ETRN

O comando ETRN é a solicitação para iniciar o processamento da fila SMTP de um host de servidor especificado.

Exemplo:
ETRN cliente.com
250 OK, queuing for client.com started (resposta do servidor)

Comandos SMTP de uso privado

O cliente e o servidor podem usar comandos SMTP de uso privado por meio de um acordo bilateral. Estas são extensões de serviço proprietárias e devem começar com “X”. Eles não devem ser registrados ou padronizados. Aqui estão alguns deles:

  • XADR – libera o status do canal que um endereço corresponde (como um endereço é roteado internamente)
  • XCIR – libera o status da instalação de verificação de circuitos
  • XSTA – libera o status do número de mensagens nas filas do canal
  • XGEN – libera o status de se uma configuração compilada e um conjunto de caracteres estão em uso

Comandos SMTP obsoletos

Na web, existem muitas fontes desatualizadas onde você pode encontrar comandos SMTP obsoletos. Para não perder tempo com opções inválidas, aqui está uma lista dos comandos que você não pode mais usar:

  • SEND
  • SOML 
  • SAML
  • RELAY
  • TLS
  • TURN

Códigos de resposta SMTP

O servidor SMTP responde ao cliente usando um código de três dígitos. Cada dígito tem um significado especial:

  • Primeiro (2 a 5) – indica se a solicitação é aceita, incompleta ou recusada
  • Segundo (0 a 5) – indica o tipo de erro ocorrido (sintaxe, informação, conexões, sistema de correio ou não especificado (duas opções))
  • Terceiro (0 a 5) – fornece uma descrição mais detalhada (junto com uma explicação textual)

O código numérico é seguido por um texto destinado ao usuário humano para entender o ponto. Diferentes servidores podem usar uma descrição textual modificada da resposta, enquanto o código numérico é permanente. Então, aqui está o que seu servidor SMTP pode responder:

Código O que significa
101Erro de conexão do servidor (nome do servidor ou porta de conexão incorretos)
211Status do sistema (resposta ao HELP)
214Mensagem de ajuda (resposta ao HELP)
220O servidor está pronto (resposta à tentativa do cliente de estabelecer uma conexão TCP)
221O servidor fecha o canal de transmissão
235Autenticação bem-sucedida (resposta ao AUTH)
250O comando solicitado está completo. Como regra, o código é seguido de OK
251O usuário não é local, mas o servidor encaminhará a mensagem para <forward-path> 
252O servidor não pode verificar o usuário (resposta ao VRFY). A mensagem será aceita e será feita uma nova tentativa de entrega
334Resposta ao comando AUTH quando o mecanismo de segurança solicitado é aceito
354O servidor confirma a transferência do conteúdo do email (resposta ao DATA). Depois disso, o cliente começa a enviar o email. Termina com um ponto final (“.“)
421O servidor não está disponível porque fecha o canal de transmissão
422A caixa de correio do destinatário excedeu seu limite de armazenamento
431Sobrecarga de arquivos (muitas mensagens enviadas para um determinado domínio)
441Sem resposta do servidor do destinatário
442Conexão interrompida
446Ocorreu um loop interno
450Caixa de correio indisponível (ocupada ou temporariamente bloqueada). Ação solicitada abortada
451O servidor abortou o comando devido a um erro local
452O servidor abortou o comando devido a armazenamento insuficiente no sistema
454TLS não disponível devido a uma razão temporária (resposta ao STARTTLS)
455Parâmetros não podem ser acomodados
471Erro do servidor de email devido ao filtro de spam local
500Erro de sintaxe (também pode ser uma linha de comando demasiado longa). O servidor não consegue reconhecer o comando
501Erro de sintaxe nos parâmetros ou argumentos
502O servidor não implementou o comando
503Sequência de comandos inadequada
504O servidor não implementou um parâmetro de comando
510Endereço de email inválido
512Um erro de DNS (verifique novamente o endereço dos seus destinatários)
523O tamanho total do seu email excede os limites do servidor do destinatário
530Problema de autenticação que geralmente requer o comando STARTTLS para ser executado
535Falha na autenticação
538Criptografia necessária para um mecanismo de autenticação solicitado
541Mensagem rejeitada pelo filtro de spam
550Caixa de correio indisponível. O servidor abortou o comando porque a caixa de correio não foi encontrada ou por razões de política. Alternativamente: É necessária autenticação para o relay
551Usuário não é local. O <forward-path> será especificado
552O servidor abortou o comando porque a caixa de correio está cheia
553Endereço de email sintaticamente incorreto
554A transação falhou devido a um erro desconhecido
ou
‘Nenhum serviço SMTP aqui’ como resposta às tentativas do cliente de estabelecer uma conexão
555Parâmetros não reconhecidos/não implementados (resposta ao MAIL FROM ou RCPT TO)

Resposta a comandos

Como você pode ter notado acima, alguns códigos são específicos para comandos. Na verdade, apenas três deles, 500, 501 e 421, podem ser uma resposta para qualquer comando SMTP. Outros podem ser categorizados como positivos e negativos (o código 354 pode ser considerado uma resposta intermediária). Vamos ver a quais comandos eles podem se referir.

ComandoResposta PositivaResposta Negativa
Handshake SMTP (estabelecendo uma conexão)220554
STARTTLS220454
EHLO ou HELO250502 (resposta ao EHLO para servidores antigos)
504
550
AUTH235
334
530
535
538
MAIL FROM250451
452
455
503
550
552
553
555
RCPT TO250
251
450
451
452
455
503
550
551
552
553
555
DATA250
354 (resposta intermediária)
450
451
452
503
550 (rejeição por razões de política)
552
554
RSET250
VRFY250
251
252
502
504
550
551
553
EXPN250
252
502
504
550
HELP211
214
502
504
NOOP250
QUIT221

Esta é a lista de códigos de resposta padrão. Deve ser mencionado também que alguns servidores SMTP podem gerar outros códigos de três dígitos. Nesse caso, o cliente SMTP terá que interpretar o primeiro dígito que deve estar na faixa de 2 a 5, inclusive. Ele indica a essência da resposta (bem-sucedida ou não).

Exemplo de uma sessão SMTP

Agora, vamos dar uma olhada em um exemplo de fluxo típico de uma sessão SMTP. Veremos dois cenários: uma transação bem-sucedida e uma abortada.

Transação bem-sucedida com verificação

Servidor: 220 server.net Simple Mail Transfer Service Ready

Cliente: EHLO cliente.org

S: 250-server.net greets clientr.org

S: 250-DSN

S: 250-VRFY

S: 250 HELP

C: VRFY Maverick

S: 250 John Maverick <j.maverick@server.net>

C: MAIL FROM:"usuario1@cliente.org"

S: 250 OK

C: RCPT TO:"j.maverick@server.net"

S: 250 OK

C: RCPT TO:"s.smith@server.net"

S: 550 No such user here

C: DATA

S: 354 Start mail input; end with <CRLF>.<CRLF>

C: Date: Qua, 30 Julho 2019 06:04:34

C: From: usuario1@cliente.org

C: Subject: Email de teste

C: To: j.maverick@server.net, s.smith@server.net

C: Oi John e Samantha 

C: .

S: 250 OK

C: QUIT

S: 221 server.net Service closing transmission channel

Neste exemplo, o cliente recebeu o código 550 que indicou que um dos destinatários não está disponível. No entanto, a transação não foi abortada como no exemplo abaixo.

Transação abortada

Servidor: 220 server.net Simple Mail Transfer Service Ready

Cliente: EHLO cliente.org

S: 250-server.net greets cliente.org

S: 250-DSN

S: 250 HELP

C: MAIL FROM:"usuario1@cliente.org"

S: 250 OK

C: RCPT TO:"s.smith@server.net"

S: 550 No such user here

C: RSET

S: 250 OK

C: QUIT

S: 221 server.net Service closing transmission channel

Benefícios de usar um ambiente de teste SMTP seguro

Uma vez que um email tenha chegado ao servidor SMTP do remetente, ele ainda está no início de sua jornada. Antes de chegar à caixa de entrada do destinatário, o email precisa chegar ao servidor SMTP do destinatário, que o encaminha para o servidor IMAP/POP3. E cada servidor implementa a autenticação antes de permitir a entrada do email. Para garantir que seus emails atendam aos requisitos técnicos para um processo de autenticação rápido, é sempre uma boa ideia testá-los e depurá-los em um ambiente, seguro como o Email Sandbox do Mailtrap.

Usando o Email Sandbox, você pode analisar dados brutos, cabeçalhos e outras informações técnicas sobre seus emails. Além disso, ele ajuda a inspecionar e validar HTML/CSS e obter relatórios de spam rápidos que ajudam a entender o que precisa ser melhorado.

Para saber mais sobre o Email Sandbox, confira nosso Guia de Introdução.

Article by Zakhar Yung Technical Content Writer @Mailtrap