2mail — SMTP relay su infrastruttura belga

SMTP per Node.js — posta dalla tua applicazione che arriva

Node.js non ha una funzione di posta integrata; praticamente ogni applicazione usa Nodemailer. Quella libreria rende semplice l'invio, ma non dice nulla sulla recapitabilità: quella dipende interamente dal server SMTP attraverso cui invii.

Nodemailer lavora con un transport. Crei un transport SMTP con i dati del tuo relay — host, porta, cifratura e credenziali — e il resto del tuo codice resta invariato. Ciò che oggi parte da un server locale o da un account di prova, domani passa da 2mail.

Perché senza relay le cose vanno storte

Un'applicazione Node.js invia tipicamente posta nel momento in cui conta: un codice di verifica, un recupero password, la conferma di una prenotazione. Sono messaggi attesi entro pochi secondi. Se partono da un server senza reputazione, una parte non arriva o arriva tardi — e l'utente clicca su "invia di nuovo" finché non rinuncia.

Configurare l'SMTP in Node.js

1

Recupera i dati

Accedi al tuo account 2mail e recupera lì il tuo server SMTP, il nome utente e la password.

2

Inserisci in Node.js

Crea in Nodemailer un transport SMTP. Indica come host il server SMTP di 2mail e come porta la 587, e disattiva l'opzione secure così che la connessione venga elevata tramite STARTTLS. Sotto auth inserisci nome utente e password del tuo accesso 2mail. Leggi quei dati da variabili d'ambiente, non dal codice. Nodemailer dispone di un metodo verify per controllare la connessione prima di inviare la prima e-mail reale — usalo.

3

Autentica il dominio

Assicurati che SPF, DKIM e DMARC siano configurati correttamente per il tuo dominio, così i destinatari possono verificare che il messaggio provenga da te.

4

Prova

Invia dalla tua piattaforma un messaggio di prova a un indirizzo presso un grande provider e verifica che arrivi nella posta in arrivo e non nella cartella spam.

I campi richiesti da Node.js

Ogni piattaforma li chiama in modo leggermente diverso, ma si tratta sempre degli stessi cinque. I valori concreti sono legati al tuo account e li trovi nel tuo account 2mail — recuperali da lì, così sei certo di usare quelli giusti.

Campo Che cosa inserire
Server SMTP (host)Il nome del server dal tuo account 2mail.
PortaLa porta corrispondente alla cifratura scelta; il tuo account indica quale.
CifraturaTLS. Non inviare mai in chiaro — altrimenti le tue credenziali viaggiano leggibili sulla rete.
Nome utenteIl login SMTP del tuo account 2mail.
PasswordLa password corrispondente. Non usare mai la password della casella di posta di un collaboratore.

Configurazione SMTP per Node.js nel codice

Esempi funzionanti per la porta 587 con STARTTLS, pronti da copiare. Sostituisci l'indirizzo mittente con un indirizzo del tuo dominio e verifica nome del server e login nel tuo account 2mail. La password va in una variabile d'ambiente — mai nel codice e mai nel controllo di versione.

Nodemailer: createTransport per la porta 587

Un solo transport, creato all'avvio e riutilizzato ovunque. La combinazione di secure: false e requireTLS: true è quella giusta per la porta 587: la connessione parte in chiaro, viene elevata a TLS tramite STARTTLS, e Nodemailer si rifiuta di proseguire se quel passaggio fallisce. Nome utente e password arrivano da variabili d'ambiente.

// mailer.js
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  host: 'relay.2mail.eu',
  port: 587,
  secure: false,     // 587 starts plain and upgrades with STARTTLS; true is for port 465 only
  requireTLS: true,  // refuse to continue if the upgrade to TLS fails
  auth: {
    user: process.env.SMTP_USERNAME,
    pass: process.env.SMTP_PASSWORD,
  },
});

module.exports = transporter;

Verificare la connessione con verify() e una prima e-mail

verify() esegue l'intera autenticazione senza inviare nulla e solleva un errore con un code da cui riconosci la causa — vedi più avanti la tabella dei messaggi di errore. Nell'invio reale registra il messageId e la risposta del server: è la tua prova che il relay ha accettato il messaggio.

const transporter = require('./mailer');

async function main() {
  // Checks DNS, port, TLS and login without sending anything.
  await transporter.verify();

  const info = await transporter.sendMail({
    from: '"Example" <noreply@example.com>',
    to: 'you@example.org',
    subject: 'SMTP test',
    text: 'Sent through the 2mail SMTP relay.',
  });

  console.log(info.messageId, info.response);
}

main().catch((err) => {
  console.error(err.code, err.message);
  process.exit(1);
});

Volumi maggiori: connessioni in pool

Se la tua applicazione invia a picchi — un giro di promemoria, una serie di avvisi — fai in modo che Nodemailer tenga aperto un piccolo numero di connessioni invece di crearne una nuova per ogni messaggio. È più veloce e agli occhi del relay non sembra un abuso.

const transporter = nodemailer.createTransport({
  pool: true,          // keep connections open and reuse them
  maxConnections: 3,
  maxMessages: 100,    // per connection, then reconnect
  host: 'relay.2mail.eu',
  port: 587,
  secure: false,
  requireTLS: true,
  auth: {
    user: process.env.SMTP_USERNAME,
    pass: process.env.SMTP_PASSWORD,
  },
});

Quali e-mail invia Node.js

Una volta configurato il relay, tutte queste passano tramite 2mail — non devi configurarle una per una.

Codici di verifica e conferme e-mail alla registrazione
Recupero password e avvisi di accesso
Conferme di prenotazioni, ordini o pagamenti
Avvisi da attività in background e code
Report di errore e avvisi di monitoraggio agli amministratori

Insidie con Node.js

secure e porta devono corrispondere

L'opzione secure non significa "sicuro o non sicuro", ma "TLS dal primo byte". Sulla porta 587 secure deve restare disattivato — STARTTLS arriva subito dopo. Se la attivi comunque, la connessione si blocca o viene interrotta subito, senza un errore chiaro.

Un solo transport, riutilizzato

Crea il transport una volta sola all'avvio e riutilizzalo, invece di crearne uno nuovo per ogni e-mail. In caso di picco — un giro di promemoria, una campagna — apriresti altrimenti centinaia di connessioni insieme, cosa che un relay può leggere come abuso. Nodemailer sa mettere in pool le connessioni; attivalo con volumi maggiori.

Aspetta il risultato e registralo

L'invio è asincrono. Chi non attende la risposta del server o non la registra, non vedrà mai che un messaggio è stato rifiutato. Registra almeno l'id del messaggio e l'eventuale rifiuto, e collega preferibilmente i webhook di 2mail per recapito e bounce, così vedi anche ciò che va storto dopo la consegna.

Messaggi di errore frequenti con Node.js

I messaggi che compaiono quando host, porta, cifratura o login non sono corretti — riportati alla lettera, così li riconosci nel tuo log, con accanto la causa e la soluzione.

Messaggio Causa Soluzione
Error: connect ECONNREFUSED 127.0.0.1:587 Nodemailer si connette alla tua macchina invece che al relay. L'opzione host è vuota o undefined — tipicamente una variabile d'ambiente che in produzione non esiste — e allora Nodemailer ripiega su localhost. Registra le opzioni subito prima di createTransport e verifica che host contenga davvero relay.2mail.eu.
Error: Connection timeout Dal relay non arriva alcuna risposta (err.code è ETIMEDOUT). Il traffico in uscita sulla porta 587 viene bloccato dal firewall del tuo provider di hosting, del tuo container o della tua piattaforma cloud. Prova dalla stessa macchina con openssl s_client -starttls smtp -connect relay.2mail.eu:587 e fai aprire la porta 587 in uscita.
Error: Invalid login: 535 5.7.8 Error: authentication failed Il relay rifiuta le credenziali (err.code è EAUTH): nome utente o password errati, oppure una variabile d'ambiente vuota, per cui Nodemailer si autentica senza credenziali o con credenziali vuote. Controlla SMTP_USERNAME e SMTP_PASSWORD nell'ambiente in cui gira il processo, e usa il login SMTP del tuo account 2mail — non la password di una casella di posta.
Error: …:SSL routines:ssl3_get_record:wrong version number secure: true sulla porta 587. Nodemailer inizia allora subito con un handshake TLS, mentre su quella porta il relay si aspetta prima SMTP semplice e passa a TLS solo dopo STARTTLS. Imposta secure: false e requireTLS: true. La connessione è cifrata altrettanto bene.
Error: self signed certificate A presentare il certificato non è il relay ma qualcosa lungo il percorso: un proxy aziendale o un antivirus che intercetta TLS, oppure un server di test locale a cui host punta ancora. Risolvi il problema lungo il percorso invece di disattivare il controllo. tls: { rejectUnauthorized: false } fa sparire l'errore, ma invia le tue credenziali a chiunque si spacci per il relay.
SPF, DKIM e DMARC spiegati La recapitabilità

Un'altra piattaforma?

L'SMTP è un protocollo standard: ogni sistema che parla SMTP — un CRM, un ERP, un'applicazione proprietaria o un server — può inviare tramite 2mail con gli stessi cinque campi.

Domande frequenti sull'SMTP per Node.js

Nodemailer invia, ma non fornisce recapitabilità: quella dipende dal server SMTP attraverso cui invii. Un server locale o una macchina cloud appena creata non ha autenticazione né reputazione, e allora una parte delle tue e-mail di verifica e di recupero finisce nella cartella spam. Un relay con SPF, DKIM e DMARC risolve la cosa.
Crea un transport SMTP con l'host del relay, la porta 587, secure disattivato (STARTTLS) e sotto auth il tuo nome utente e la tua password. Conserva quei dati in variabili d'ambiente. Richiama il metodo verify per testare la connessione prima di inviare la prima e-mail reale.
Disattivo. 2Mail lavora sulla porta 587: la connessione parte normalmente e viene elevata a TLS tramite STARTTLS. Se attivi comunque secure, il tuo client si aspetta TLS dal primo byte e ottieni un errore di connessione o una connessione che resta bloccata.
Per il codice esistente con Nodemailer l'SMTP è la via più rapida: cambia solo il transport. Se invii grandi volumi o vuoi elaborare stato di recapito e bounce nella tua applicazione, l'API e-mail di 2mail offre una chiave API per applicazione e webhook firmati. Possono coesistere.
Trust Guard Security Scanned
Chiama ora
Invia un'e-mail