Como resolver erros de SMTP

jul 17, 2021

O que é SMTP?

Simple Mail Transfer Protocol (SMTP) é um protocolo de comunicação usado para transmitir e-mail entre os servidores de e-mail correspondentes. Usando um cliente de e-mail como Mac Mail, Outlook, Thunderbird ou clientes da web como Gmail ou Windows Live, o SMTP pode enviar mensagens para um servidor de e-mail. Embora o SMTP tenha sido inicialmente projetado como um sistema de transporte e entrega de e-mail, ele posteriormente englobou os protocolos de envio de e-mail que agora estão em uso tanto pelo Post Office Protocol (POP) quanto pelo Internet Message Access Protocol (IMAP). Os clientes de e-mail mencionados acima usam esses protocolos para recuperar e-mail de um servidor de e-mail. Quando esse sistema falha, ele fornece os meios para identificar e resolver erros de SMTP.

Como funciona o SMTP?

Quando um e-mail é enviado, o cliente de e-mail se autentica no servidor de e-mail fornecendo o nome de usuário e a senha associados à conta de e-mail. Se as credenciais forem válidas, o e-mail do usuário é reconhecido, analisado e encaminhado ao destino dos destinatários. Se a autenticação falhar, uma mensagem de erro SMTP é criada e registrada no servidor e geralmente no software de e-mail do cliente.

O que acontece se o serviço for interrompido?

Todos nós já tivemos problemas com e-mail. Quando isso ocorre, não apenas o e-mail não é enviado, mas uma mensagem de falha é enviada e uma entrada de registro é criada nos servidores de envio e recebimento de e-mail. A entrada de registro contém uma quantidade considerável de informações. Uma parte dessas entradas de log é chamada de código de status.

Códigos de status SMTP

Um código de status é uma designação numérica fornecida pelo SMTP anexada a cada mensagem de e-mail enviada ou recebida, denotando o que foi feito com a mensagem. Podemos consultar esse número para reunir as informações necessárias sobre o motivo da falha e o que é necessário para reparar o problema. Quando revisamos esse código, podemos usar as informações do código de status para determinar por que o e-mail não foi enviado. 

Códigos de resposta SMTP

O primeiro número listado no código de resposta geral indica se a resposta do servidor é boa, ruim ou incompleta. Os números do código de resposta geral variam de um a sete e cobrem todos os problemas incorridos quando ocorre uma falha de email. Esses códigos são sempre vistos nos logs do servidor. Essas mensagens de erro contêm significados amplos que são facilmente encontrados online e mencionados abaixo.

Códigos de Resposta Geral

CódigosTipo de statusSignificado
1.XXStatus de endereçamentoOs relatórios de status de endereço no endereço de origem ou destino. Pode incluir sintaxe de endereço ou validade. Esses erros geralmente podem ser corrigidos pelo remetente e tentados novamente.
2.XXStatus da caixa de correioO status da caixa de correio indica que algo relacionado à caixa de correio causou esse DSN. Os problemas da caixa de correio estão sob o controle geral do destinatário.
3.XXStatus do sistema de correioO status do sistema de correio indica que algo relacionado ao sistema de destino causou esse DSN. Presume-se que os problemas do sistema estejam sob o controle geral do administrador do sistema de destino.
4.XXStatus de rede e roteamentoOs códigos de rede ou de roteamento relatam o status do próprio sistema de entrega. Esses componentes do sistema incluem qualquer infraestrutura necessária, como serviços de diretório e roteamento. Os problemas de rede são considerados como estando sob o controle do destino ou administrador do sistema intermediário.
5, XXStatus do protocolo de entrega de correioOs códigos de status do protocolo de entrega de mensagens relatam falhas envolvendo o protocolo de entrega de mensagens. Essas falhas incluem toda a gama de problemas resultantes de erros de implementação ou uma conexão não confiável.
6.XXConteúdo da mensagem ou status da mídiaO conteúdo da mensagem ou códigos de status de mídia relatam falhas envolvendo o conteúdo da mensagem. Esses códigos relatam falhas devido à tradução, transcodificação ou mídia de mensagem não suportada. O conteúdo da mensagem ou problemas de mídia estão sob o controle do remetente e do destinatário, os quais devem oferecer suporte a um conjunto comum de tipos de conteúdo com suporte.
7.XXSegurança ou status da políticaOs códigos de status de segurança ou política relatam falhas envolvendo políticas, como filtragem por destinatário ou por host e operações criptográficas. As questões de segurança e de status de política são consideradas como estando sob o controle de um ou de ambos, remetente e destinatário. Tanto o remetente quanto o destinatário devem permitir a troca de mensagens e providenciar a troca das chaves e certificados necessários para as operações criptográficas.

Existem mais de oitenta subcódigos que definem ainda mais as respostas em categorias de erro mais específicas. Podemos revisar esses códigos para determinar como solucionar nossos erros de SMTP.

Significados do código de status SMTP

Abaixo estão alguns dos códigos de status mais comuns e seus significados

CódigoSignificado
200(resposta de sucesso não padrão, consulte rfc876)
211Status do sistema ou resposta da ajuda do sistema
214Mensagem de ajuda
220<domínio> Serviço pronto
221<domínio> Serviço fechando canal de transmissão
250Ação de email solicitada ok, concluída
251Usuário não local; irá encaminhar para <forward-path>
252Não é possível o usuário VRFY, mas aceitará a mensagem e tentará entrega
354Inicie a entrada de e-mail; termine com <CRLF>. <CRLF>
421<domínio> Serviço não disponível, fechando canal de transmissão
450Ação de e-mail solicitada não realizada: caixa de correio indisponível
451Ação solicitada abortada: erro local no processamento
452Ação solicitada não realizada: armazenamento insuficiente do sistema
500Erro de sintaxe, comando não reconhecido
501Erro de sintaxe em parâmetros ou argumentos
502Comando não implementado
503Uma sequência de comandos ruim
504Parâmetro de comando não implementado
521<domínio> não aceita e-mail (ver rfc1846)
530Acesso negado (??? a Sendmailism)
550Ação requisitada nao realizada: caixa postal indispnivel
551Usuário não local; por favor, tente <forward-path>
552Ação de e-mail solicitada abortada: alocação de armazenamento excedida
553Ação solicitada não realizada: nome da caixa de correio não permitido
554Falha na transação

Solução de problemas de SMTP

Abaixo estão as etapas executadas quando ocorre um erro de e-mail. Essas etapas são quase idênticas em todas as circunstâncias. A única exceção é quando o problema é visível para o administrador do sistema. 

Juntar informação

Nosso primeiro passo é coletar informações. Começamos respondendo a essas perguntas básicas.

  • Estou conectado à Internet?
  • As configurações da minha conta de cliente de e-mail estão corretas?
  • Meu software antivírus está ativado? Isso pode bloquear o envio de e-mails.
  • Meu firewall está funcionando? Isso pode bloquear o envio de e-mails.
  • Eu vi alguma mensagem de e-mail suspeita em minha caixa de correio?
  • Há problemas para enviar ou receber e-mails? Ou ambos?
  • Apenas uma conta é afetada ou várias contas?
  • Quais são os endereços de e-mail com problemas? Ou domínio, se for múltiplo.
  • Há alguma devolução ou mensagem de erro ocorrendo?
  • O DNS do domínio foi alterado recentemente?
  • Posso me conectar e enviar / receber e-mails da minha conta de webmail?
  • Qual cliente de e-mail você está usando?

As respostas a essas perguntas permitirão que nossos administradores deduzam de onde o erro está se originando rapidamente. 

Localizando os Servidores de Nomes Autoritativos

Se, por acaso, algum registro DNS tiver sido alterado nas 24 horas anteriores, essa pode ser a causa dos erros. Às vezes, a propagação de novos registros pode ser atrasada se o proprietário do servidor de nomes tiver tempos de TTL (ou tempo de vida) mais longos configurados. Para localizar os servidores de nomes autorizados, precisamos executar o comando whois para encontrar essas informações.

whois domain.com

Este comando retornará uma quantidade significativa de informações. A parte em que estamos interessados ​​está abaixo.

Domain servers in listed order:

NS1.DOMAIN.COM            210.60.130.21
NS2.DOMAIN.COM            65.81.241.154

Usando essas informações, podemos verificar se os servidores de nomes estão listados no registrador. Isso também indica que eles estão resolvendo corretamente para o endereço adequado. Novamente, usamos o comando whois para verificar isso.

root@host:~# whois ns1.domain.com
   Server Name: NS1.DOMAIN.COM
   IP Address: 66.96.142.147
   Registrar: Domain.com, LLC
   Registrar WHOIS Server: whois.domain.com
   Registrar URL: http://www.domain.com
>>> Last update of whois database: 2021-02-16T17:42:44Z <<<

Se não houver um endereço IP associado a este servidor de nomes, sabemos que o domínio não está funcionando corretamente e o e-mail não será enviado. 

Consultando os Nameservers para Registros MX

Os registros MX de um domínio informam a outros servidores na Internet quais hosts aceitam e-mail para um domínio. Se o seu e-mail estiver hospedado em um servidor na HostSeries, o nome do host desse servidor deve estar no registro MX. Quando encontramos essas informações, usamos o comando dig . Este comando pesquisa vários tipos de registros DNS. 

root@host:~# dig mx domain.com

; <<>> DiG 9.16.1-Ubuntu <<>> mx domain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19270
;; flags: qr rd ad; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;domain.com.                    IN      MX

;; ANSWER SECTION:
domain.com.             0       IN      MX      10 mx.domain.com.
mx.domain.com.          0       IN      A       66.96.140.72
mx.domain.com.          0       IN      A       66.96.140.73
ns-166.awsdns-20.com.   0       IN      A       205.251.192.166
ns-2022.awsdns-60.co.uk. 0      IN      A       205.251.199.230
ns-683.awsdns-21.net.   0       IN      A       205.251.194.171
ns-2022.awsdns-60.co.uk. 0      IN      AAAA    2600:9000:5307:e600::1

;; Query time: 80 msec
;; SERVER: 172.29.80.1#53(172.29.80.1)
;; WHEN: Tue Feb 16 12:49:51 EST 2021
;; MSG SIZE  rcvd: 274

root@host:~#

Como podemos ver na seção de respostas, os registros MX são anotados em resposta a esse comando.

mx.domain.com.          0       IN      A       66.96.140.72
mx.domain.com.          0       IN      A       66.96.140.73

Outros comandos além de dig , como host e ping , também podem fornecer essas informações. Outras ferramentas online que podem resolver nomes de domínio normalmente nos fornecem os dados de que precisamos. 

Verificando a entrega de e-mail

Usando Telnet

Se todas as informações de domínio acima estiverem sendo resolvidas corretamente, podemos testar o servidor. Para esta tarefa, usamos o comando telnet . Usando o comando telnet , podemos fazer login no servidor usando a porta 25 (a porta SMTP padrão ). 

Observação: pode levar um ou dois minutos para que o servidor retorne as 220 respostas mostradas abaixo. Isto é normal.

root@host:~# telnet 66.96.140.72 25
Trying 66.96.140.72...
Connected to 66.96.140.72.
Escape character is '^]'.
220-host.domain.com ESMTP Exim 4.94 #2 Tue, 16 Feb 2021 13:04:21 -0500
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.

Uma vez conectado, veremos um banner de mensagem semelhante ao acima. Para interagir com o servidor, emitimos o comando “EHLO” e nosso nome de host. Normalmente, o nome do host não importa porque o servidor SMTP ao qual estamos nos conectando pesquisará as informações de RDNS (DNS reverso) para o IP ao qual estamos nos conectando.

EHLO server.online.com
250-host.server.com Hello host.server.com [65.21.72.171]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-X_PIPE_CONNECT
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP

Definir Mensagem

Em seguida, informamos ao servidor quem está enviando a mensagem, usando o seguinte comando.

MAIL FROM: user1@dominio.com

O servidor deve responder com “250 OK”.

250 OK

Agora, podemos inserir o endereço de e-mail do destinatário usando o comando ” RCPT TO: “. O remetente e o destinatário podem ter o mesmo endereço de e-mail.

RCPT TO: user2@dominio.com

Se o servidor puder verificar o remetente, o destinatário e outras informações, ele nos informará que a mensagem foi aceita.

250 Accepted

Enviar mensagem

A seguir, inserimos a própria mensagem usando o comando “DATA” .

DATA

O servidor responde dizendo-nos para inserir a mensagem de e-mail.

354 Enter message, ending with "." on a line by itself

Agora, entramos na linha de assunto do e-mail (este não é um comando do servidor). Depois de adicionar essas informações, pressionamos Enter duas vezes para sinalizar o fim dos cabeçalhos e, em seguida, inserimos o corpo da mensagem.

Subject: test message

Hello, this is a test message.

.

Assim que a mensagem for digitada, adicione um ” . ” Em uma linha separada. Isso permite que o servidor saiba que nossa mensagem está completa. O servidor então atribui um ID à mensagem e diz, “250 OK id = messagenumbersandletters.”

250 OK id=1JR2se-0201DI-Cq

Assim que virmos a saída “250 OK”, isso indica que a mensagem de e-mail foi enviada. Podemos fechar a conexão digitando o comando ” SAIR “.

QUIT
The server announces that it is going to close the connection and then does so:

221 server.online.com closing connection
Connection closed by foreign host.

Sabemos que nosso e-mail foi enviado porque usava o código de status 250, portanto, sabemos que o problema não é com SMTP no servidor. 

Usando Webmail

Também podemos verificar uma conexão de trabalho usando o cliente de webmail anexado ao nosso domínio. Se visitarmos https://host.server.com:2096/, cPanel nos mostrará a tela de login do webmail. 

Assim que fizermos login no webmail, envie um e-mail de teste para um endereço de e-mail secundário que esteja funcionando. Se o e-mail for enviado e recebido com sucesso, sabemos que o servidor de e-mail de saída funciona conforme o esperado.

Agora, responda ao e-mail com o endereço de e-mail secundário. Se recebermos o e-mail na interface do webmail, o servidor de e-mail de entrada também está funcionando. Isso nos diz que o problema não está em nosso servidor. 

Se, por algum motivo, não conseguirmos enviar, nosso próximo passo é verificar as entradas de registro de e-mail em busca de códigos de erro. Analisaremos as etapas para resolver isso mais adiante no artigo.