# Perché ricevo errori TLS quando mi collego all’SMTP?

> Risolvi gli errori di handshake SSL e TLS con smtp.emailit.com, come «wrong version number», nomi del certificato non corrispondenti ed errori STARTTLS.

Questo articolo tratta gli errori che si verificano mentre il client e l’SMTP relay di Emailit configurano la cifratura. Quasi sempre derivano da una mancata corrispondenza tra la porta e la modalità TLS impostata nel client.

## Sintomi

- `SSL routines:ssl3_get_record:wrong version number` o `ERR_SSL_WRONG_VERSION_NUMBER`
- `Hostname/IP does not match certificate's altnames` o `certificate verify failed`
- `STARTTLS failed`, `Greeting never received` oppure la connessione si blocca dopo essersi aperta
- `unsupported protocol` o `no protocols available`

## Causa

Emailit usa due modalità TLS, e ogni porta ne prevede una:

| Porta | Modalità | Impostazione tipica del client |
| --- | --- | --- |
| 587, 2525, 2587, 25 | **STARTTLS**: la sessione parte in chiaro e poi passa alla cifratura | Nodemailer `secure: false`, PHPMailer `ENCRYPTION_STARTTLS`, «TLS» nella maggior parte delle interfacce |
| 465 | **TLS implicito**: cifrata fin dal primo byte | Nodemailer `secure: true`, PHPMailer `ENCRYPTION_SMTPS`, «SSL» nella maggior parte delle interfacce |

Le cause più comuni sono:

- **TLS implicito su una porta STARTTLS**, ad esempio `secure: true` con la porta 587. Il client si aspetta un handshake TLS ma riceve un saluto in chiaro, e ne risulta «wrong version number».
- **STARTTLS sulla porta 465.** Il client attende un saluto che il server non invia mai in chiaro, quindi la connessione si blocca.
- **Connessione tramite indirizzo IP o tramite un tuo CNAME.** Il certificato è emesso per `smtp.emailit.com`, quindi qualsiasi altro nome host non supera la verifica.
- **Uno stack TLS datato.** Il relay negozia TLS 1.2 o TLS 1.3. I client limitati a TLS 1.0 o 1.1, o con un bundle di CA obsoleto, non riescono a completare l’handshake.
- **Ispezione del traffico.** Alcuni antivirus e proxy aziendali intercettano l’SMTP e presentano un proprio certificato.

## Soluzione

1. **Abbina la porta alla modalità.** Usa la porta `587` con STARTTLS, oppure la porta `465` con TLS implicito. Non mescolarle.

```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. **Usa il nome host esatto.** Imposta l’host su `smtp.emailit.com`. Non usare un indirizzo IP o un alias.

3. **Richiedi la cifratura nel client.** STARTTLS è offerto su ogni porta in chiaro, ma il relay non lo impone. Attiva l’opzione «require TLS» del client, così le credenziali non vengono mai inviate senza cifratura.

4. **Prova l’handshake dalla macchina che invia.**

```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
```

   Un risultato corretto mostra `subject=CN=smtp.emailit.com` e `Verify return code: 0 (ok)`. Un subject diverso significa che qualcosa nella tua rete sta intercettando la connessione.

5. **Aggiorna i runtime datati.** Se il client non riesce a negoziare TLS 1.2, aggiorna il runtime del linguaggio o OpenSSL e i certificati CA di sistema.

Se l’handshake riesce ma l’accesso no, vedi [Perché l’SMTP restituisce 535 Authentication failed?](/it/docs/kb/smtp-535-authentication-failed/). Se non riesci proprio a collegarti, vedi [Perché la connessione SMTP va in timeout?](/it/docs/kb/smtp-connection-timeout-port-25/).

## Serve ancora aiuto?

[Contatta il supporto](/contact/) o chiedi su [Discord](https://discord.emailit.com). Indica la porta, la libreria client e la sua versione, e l’output del comando `openssl s_client`.

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