Nodejs_logo_light
Wer schon einmal versucht hat, mit Node.js Mails zu versenden, wurde wahrscheinlich von einer sehr großen Anzahl an möglichen Modulen überschwemmt, die sich allerdings teilweise sehr stark voneinander unterscheiden. Neben umfangreicheren Client-Bibliotheken, wie zum Beispiel NodeMailer oder EmailJS, gibt es auch einige sehr schlanke Module, die nur für spezielle Einsatzzwecke geeignet sind und sogar Clients die nur mit ganz bestimmten, teilweise kostenpflichtigen, Angeboten zusammenarbeiten.
Um ein wenig Überblick in diesen Urwald zu bringen stelle ich in diesem Blogpost zwei funktionierende Lösungen für unterschiedliche Einsatzzwecke vor.

Lösung 1: “Quick and dirty” mit Node-Sendmail

Den geringsten Aufwand hat man, wenn man die Mail einfach direkt an den Ziel-Mailserver senden kann. Allerdings werden derartige Emails häufig ein Opfer von Spamfiltern und es ist dem Empfänger auch nicht möglich auf die Email zu antworten. Wenn das allerdings kein Problem darstellt lassen sich mit Node-Sendmail mit nur wenigen Zeilen Mails automatisiert versenden.
Nachdem man die Bibliothek “sendmail” mit dem Node Package Manager installiert hat, kann man mit folgendem Snippet einfach Mails in seiner Anwendung versenden:

mail = require('sendmail')();
mail({
       from: 'noreply@meinedomain.com',
       to: 'empfaenger@example.com',
       subject: 'Mail versendet mit sendmail',
       content: 'Kein text.'
   },
   function(err,response){
      if(err){
         console.log(err);
      }
      console.dir(response);
});

Lösung 2: Als Client eines Mailservers mit Nodemailer

Wenn die obere Lösung nicht möglich ist, gibt es auch Module die als Client eines Mailservices fungieren können. Diese Lösung erfordert allerdings mehr Aufwand, da man erst die Logindaten und das verwendete Protokoll definieren muss und einen Account benötigt.
Folgendes Beispiel erklärt die Verwendung von Nodemailer mit Gmail:

var mail = require("nodemailer");
var transp = mail.createTransport("SMTP",{
    host: "smtp.gmail.com",
    port: 465,
    secureConnection: true,
    auth: {
        user: "meinaccount@gmail.com",
        pass: "secret"
    }
});
transp.sendMail({
        to:   "empfaenger@example.com",
        subject: "Test",
        text: "Versendet mit Nodemailer"
    },
    function(err,response){
        if(err){
            console.log(err);
        }
        console.log(response);
});

HTML-Templates

Da man in den meisten Fällen in seiner Anwendung nicht nur Mails versenden, sondern auch dynamisch generieren will, brauchen wir zusätzlich eine Möglichkeit Templates zu verwenden. Gute Erfahrungen habe ich bisher mit Node-email-templates gemacht. Damit ist es möglich Mailtemplates mit EJS zu erstellen und daraus HTML zu generieren. Eine komplette Beschreibung dieses Vorgangs würde den Rahmen dieses Blogposts sprengen, jedoch existiert eine detaillierte Beschreibung auf der Projektseite.