# Por que recebo erros de TLS ao me conectar ao SMTP?

> Resolva erros de handshake SSL e TLS com o smtp.emailit.com, como “wrong version number”, nomes de certificado que não correspondem e falhas de STARTTLS.

Este artigo cobre os erros que acontecem enquanto o seu cliente e o SMTP relay do Emailit estabelecem a criptografia. Eles quase sempre vêm de uma incompatibilidade entre a porta e o modo de TLS configurado no seu cliente.

## Sintomas

- `SSL routines:ssl3_get_record:wrong version number` ou `ERR_SSL_WRONG_VERSION_NUMBER`
- `Hostname/IP does not match certificate's altnames` ou `certificate verify failed`
- `STARTTLS failed`, `Greeting never received` ou a conexão trava depois de conectar
- `unsupported protocol` ou `no protocols available`

## Causa

O Emailit usa dois modos de TLS, e cada porta espera um deles:

| Porta | Modo | Configuração típica do cliente |
| --- | --- | --- |
| 587, 2525, 2587, 25 | **STARTTLS**: a sessão começa em texto simples e é atualizada | Nodemailer `secure: false`, PHPMailer `ENCRYPTION_STARTTLS`, “TLS” na maioria das interfaces |
| 465 | **TLS implícito**: criptografado desde o primeiro byte | Nodemailer `secure: true`, PHPMailer `ENCRYPTION_SMTPS`, “SSL” na maioria das interfaces |

As causas comuns são:

- **TLS implícito em uma porta STARTTLS**, por exemplo `secure: true` com a porta 587. O cliente espera um handshake TLS, mas recebe uma saudação em texto simples, o que produz “wrong version number”.
- **STARTTLS na porta 465.** O cliente espera uma saudação que o servidor nunca envia em texto claro, e a conexão trava.
- **Conexão por endereço IP ou por um CNAME seu.** O certificado é emitido para `smtp.emailit.com`, então qualquer outro nome de host falha na verificação.
- **Uma pilha TLS antiga.** O relay negocia TLS 1.2 ou TLS 1.3. Clientes limitados a TLS 1.0 ou 1.1, ou com um pacote de CAs desatualizado, não conseguem concluir o handshake.
- **Inspeção de tráfego.** Alguns antivírus e proxies corporativos interceptam o SMTP e apresentam o próprio certificado.

## Solução

1. **Combine a porta com o modo.** Use a porta `587` com STARTTLS ou a porta `465` com TLS implícito. Não misture os dois.

```javascript title="mailer.js"
const transporter = nodemailer.createTransport({
  host: 'smtp.emailit.com',
  port: 587,
  secure: false,     // STARTTLS on 587; set true only for port 465
  requireTLS: true,  // refuse to send if the upgrade fails
  auth: { user: 'emailit', pass: process.env.EMAILIT_API_KEY },
});
```

2. **Use o nome de host exato.** Defina o host como `smtp.emailit.com`. Não use um endereço IP nem um alias.

3. **Exija criptografia no seu cliente.** O STARTTLS é oferecido em todas as portas de texto simples, mas o relay não o impõe. Ative a opção “require TLS” do seu cliente para que as credenciais nunca sejam enviadas sem criptografia.

4. **Teste o handshake a partir da máquina que envia.**

```bash
openssl s_client -starttls smtp -connect smtp.emailit.com:587 -servername smtp.emailit.com
openssl s_client -connect smtp.emailit.com:465 -servername smtp.emailit.com
```

   Um resultado saudável mostra `subject=CN=smtp.emailit.com` e `Verify return code: 0 (ok)`. Um subject diferente significa que algo na sua rede está interceptando a conexão.

5. **Atualize runtimes antigos.** Atualize o runtime da linguagem ou o OpenSSL e os certificados de CA do sistema se o seu cliente não conseguir negociar TLS 1.2.

Se o handshake funcionar, mas o login falhar, consulte [Por que o SMTP retorna 535 Authentication failed?](/pt/docs/kb/smtp-535-authentication-failed/). Se você não conseguir nem se conectar, consulte [Por que a minha conexão SMTP dá timeout?](/pt/docs/kb/smtp-connection-timeout-port-25/).

## Ainda com problemas?

[Fale com o suporte](/contact/) ou pergunte no [Discord](https://discord.emailit.com). Informe a porta, a biblioteca do seu cliente e a versão dela, e a saída do comando `openssl s_client`.

---
Fonte: https://emailit.com/pt/docs/kb/smtp-tls-errors/
