Nodemailer è il modulo più diffuso nella community Node.js per la gestione dell’invio di email. Questa liberia è utilizzata anche in siti web importanti perché permette, ad esempio, di inviare notifiche all'utente (come conferme di registrazione), link per il reset della password, report e newsletter.
Nodemailer, come tanti altri moduli di Node.js, non è già preinstallato. Per aggiungere Nodemailer al tuo progetto, apri il terminale nella cartella del progetto (come abbiamo visto nella lezione precedente) e digita:
npm install nodemailerQuesta istruzione permetterà di installare Nodemailer e aggiungerlo nella cartella "node_modules".
In questo esempio, utilizzeremo un account Outlook per inviare email.
Per prima cosa, dobbiamo creare un file con estensione .js, ad esempio email.js.
Ora dobbiamo includere la libreria Nodemailer appena installata:
const nodemailer = require('nodemailer');Per riuscire ad inviare una email, dobbiamo creare un oggetto che contenga le credenziali necessarie per collegarci al server di posta del provider che usiamo, come Outlook. Questo oggetto deve includere il nome del server, l'indirizzo email del mittente e la relativa password.
Lo chiameremo transporter, perché sarà il "trasportatore" incaricato di inviare materialmente i messaggi: fa da ponte tra la nostra applicazione e il server di posta elettronica.
const transporter = nodemailer.createTransport({
host: 'smtp.office365.com',
auth: {
user: '[email protected]',
pass: 'password'
}
});Nota: spesso utilizzare servizi come Outlook o Gmail non è la scelta ideale, soprattutto in un sito web reale, perché questi provider tendono a bloccare automaticamente qualsiasi invio che sembri sospetto o automatizzato.
Ora definiamo le proprietà dell'email che vogliamo inviare. Si possono utilizzare i seguenti parametri:
from: indica l'email del mittente.to: indica l'email del destinatario a cui inviare l'email.cc e bcc: indica i destinatari a cui inviare l'email come copia.subject: indica l'oggetto dell'email.text: indica il corpo dell'email se è in formato testo.html: indica il corpo dell'email se è in formato HTML.const mailOptions = {
from: "[email protected]",
to: "[email protected]",
subject: "Test",
text: "Questa è un'email di test"
};Dopo aver configurato il server e le proprietà dell'email, possiamo inviarla. Per farlo, utilizziamo il metodo sendMail di Nodemailer.
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log("Errore nell'invio: ", error);
} else {
console.log("Email inviata con successo: ", info.messageId);
}
});Nodemailer andrebbe utilizzato preferibilmente con un indirizzo email appartenente al proprio dominio, come ad esempio [email protected], oppure con servizi specifici (che però sono spesso a pagamento).
Se non si dispone di un dominio o di un servizio dedicato, è comunque possibile testare Nodemailer utilizzando un mail server di test, che simula l'invio delle email senza recapitarle realmente.
Il servizio che ti consigliamo noi si chiama Ethereal ed è totalmente gratuito. Puoi creare un indirizzo, vai alla pagina per crearlo e copia l'email e la password da inserire nella configurazione di Nodemailer.
Ecco il codice completo:
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
auth: {
user: "[email protected]",
pass: "KQ6ekxKk7gwpnd5pUU"
}
});
const mailOptions = {
from: "[email protected]",
to: "[email protected]",
subject: "Test",
text: "Questa è un'email di test"
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log("Errore nell'invio:", error);
} else {
console.log("Email inviata con successo:", info.messageId);
}
});