Um guia prático para testar um servidor de e-mail manualmente. Aprenda o que cada comando SMTP faz, como o servidor responde e como executar uma sessão de verificação completa com telnet ou openssl.
SMTP (Simple Mail Transfer Protocol) é um protocolo de texto puro, baseado em linhas. Isso significa que você pode conversar com um servidor de e-mail diretamente de um terminal e ler exatamente o que ele responde — sem necessidade de software especial. Esta é a maneira mais transparente de verificar se uma caixa de correio existe, se um servidor está acessível e como ele está configurado.
Primeiro encontre o servidor de e-mail (host MX) do domínio, depois abra uma conexão TCP com sua porta SMTP. A porta clássica é a 25. As portas de submissão 587 e 2525 são usadas com STARTTLS; a porta 465 é TLS implícito (SMTPS).
Conexão simples (porta 25):
telnet mail.example.com 25
Porta STARTTLS (587 ou 25) — o telnet não faz TLS, use o openssl:
openssl s_client -connect mail.example.com:587 -starttls smtp -crlf
Porta TLS implícito (465):
openssl s_client -connect mail.example.com:465 -crlf
Observação: muitos provedores de internet residencial e móvel bloqueiam a porta 25 de saída para combater spam. Se telnet ... 25 apenas travar, geralmente é o seu provedor, e não o servidor de e-mail. Teste a partir de um servidor/VPS onde a porta 25 esteja aberta, ou use as portas de submissão.
Você digita comandos (não diferenciam maiúsculas de minúsculas); o servidor responde com um código de 3 dígitos e um texto. Termine cada comando com Enter (CRLF).
| Comando | O que faz |
|---|---|
HELO domain | Saudação legada. Identifica o host de origem pelo nome. O servidor responde 250. |
EHLO domain | Saudação moderna (HELO Estendido). Igual ao HELO, mas o servidor também lista as extensões suportadas (STARTTLS, AUTH, SIZE, PIPELINING…). |
MAIL FROM:<addr> | Inicia uma nova mensagem e define o remetente do envelope (o “caminho de retorno”). Resposta 250 se aceito. |
RCPT TO:<addr> | O comando-chave para a verificação. Pede ao servidor que aceite um destinatário. 250 = a caixa de correio é aceita; 550 = usuário inexistente; 4xx = tente mais tarde (por exemplo, greylisting). |
DATA | Inicia o corpo da mensagem. O servidor responde 354; você envia os cabeçalhos + corpo e finaliza com um único ponto . em uma linha própria. (Em uma verificação você nunca chega a esta etapa.) |
RSET | Reinicia a transação atual (esquece MAIL FROM / RCPT TO) sem encerrar a conexão. |
VRFY user | Pede ao servidor que verifique um nome de usuário/endereço. Projetado exatamente para isso, mas quase sempre desativado hoje em dia (retorna 252 ou 502) porque revela endereços válidos a spammers. |
EXPN list | Pede ao servidor que expanda uma lista de distribuição em seus membros. Assim como o VRFY, desativado em quase todos os lugares pela mesma razão de privacidade. |
STARTTLS | Atualiza uma conexão simples para TLS criptografado (nas portas 25/587). Oferecido apenas se listado na resposta ao EHLO. |
AUTH LOGIN / PLAIN | Autentica um usuário (necessário para enviar mensagens pelas portas de submissão, não para a verificação). |
NOOP | Não faz nada; o servidor responde 250. Útil para manter uma conexão ativa ou testar a capacidade de resposta. |
HELP | Pede ao servidor que liste os comandos que ele suporta. |
QUIT | Encerra a sessão educadamente. O servidor responde 221 e fecha a conexão. |
O primeiro dígito indica a categoria, de modo que você consegue ler qualquer resposta mesmo sem conhecer o código exato:
354 após o DATA).| Código | Significado |
|---|---|
220 | Serviço pronto (a faixa de saudação). |
221 | Encerrando a conexão (resposta ao QUIT). |
250 | OK — comando aceito (a resposta que você quer após o RCPT TO). |
251 / 252 | Usuário não local mas será encaminhado / não é possível verificar mas tentará entregar. |
354 | Comece a enviar o corpo da mensagem (após o DATA). |
421 | Serviço indisponível, encerrando — frequentemente limitação de taxa. |
450 / 451 / 452 | Problema temporário (caixa de correio ocupada, erro local, pouco armazenamento). O greylisting aparece com frequência aqui. |
502 | Comando não implementado (resposta típica ao VRFY / EXPN). |
550 | Caixa de correio indisponível / usuário inexistente — o endereço não existe. |
551 / 552 / 553 / 554 | Usuário não local / cota excedida / nome de caixa de correio inválido / transação falhou. |
Verificando se john@example.com existe. As linhas que você digita são marcadas com >; todo o resto é o servidor:
$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← a caixa de correio EXISTE > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye
Se, em vez disso, o destinatário não existir, você veria algo como:
> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown
4xx temporário na primeira tentativa de propósito, pedindo que você volte mais tarde. Um 4xx não significa que o endereço é inválido.250 e resolvem isso depois. Nesse caso, o RCPT TO não consegue provar que uma caixa de correio específica existe. Para detectar um catch-all, teste um endereço claramente aleatório: se ele também for aceito, o domínio é catch-all.Quer isso feito automaticamente, incluindo consulta MX, detecção de catch-all e um veredicto claro? Use nosso Verificador de E-mail na página inicial.