Come creare un server SMTP di base con Node.js

Un server SMTP (Simple Mail Transfer Protocol) è essenziale per inviare email. Node.js offre una serie di librerie che rendono la configurazione di un server SMTP semplice e veloce. In questo articolo, mostreremo come creare un server SMTP di base utilizzando Node.js e il modulo smtp-server.

Il modulo smtp-server è una libreria leggera e potente per configurare server SMTP. Installalo con il comando:


npm install smtp-server

Crea un file chiamato server.js e aggiungi il seguente codice:


const { SMTPServer } = require("smtp-server");

const server = new SMTPServer({
  // Funzione per autenticare i client
  onAuth(auth, session, callback) {
    if (auth.username === "user" && auth.password === "password") {
      return callback(null, { user: "authorized" });
    }
    return callback(new Error("Invalid username or password"));
  },

  // Funzione per gestire i messaggi in arrivo
  onData(stream, session, callback) {
    let message = "";
    stream.on("data", (chunk) => {
      message += chunk.toString();
    });

    stream.on("end", () => {
      console.log("Received message:", message);
      callback(null); // Conferma che il messaggio è stato ricevuto
    });
  },

  // Configurazioni aggiuntive
  disabledCommands: ["STARTTLS"], // Disabilita STARTTLS per semplicità
});

// Avvia il server SMTP sulla porta 2525
server.listen(2525, () => {
  console.log("SMTP server is running on port 2525");
});

Puoi utilizzare un client SMTP, come uno script Node.js, per testare il server. Ecco un esempio di script per inviare un'email:


const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
  host: "localhost",
  port: 2525,
  secure: false,
  auth: {
    user: "user",
    pass: "password",
  },
});

const mailOptions = {
  from: "test@example.com",
  to: "recipient@example.com",
  subject: "Test Email",
  text: "Hello from Node.js SMTP server!",
};

transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    return console.error("Error sending email:", error);
  }
  console.log("Email sent:", info.response);
});

Conclusione

Abbiamo configurato un server SMTP di base utilizzando Node.js e il modulo smtp-server. Questo server può essere utilizzato per testare l'invio di email o come base per un'applicazione più complessa. Per migliorare la sicurezza e le funzionalità, considera di implementare SSL/TLS e di integrare il server con un database per la gestione degli utenti.

Torna su