Ich kenne was, was Du nicht kennst: Nodemailer

E-Mails programmatisch zu versenden gehört für viele Entwickler zum Alltag. Doch welches Node.js-Modul eignet sich hierfür am besten? Das Modul Nodemailer gehört zumindest zu den bekanntesten, doch hält es auch, was es verspricht?

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 4 Min.
Von
  • Golo Roden
Inhaltsverzeichnis

E-Mails programmatisch zu versenden gehört für viele Entwickler zum Alltag. Doch welches Node.js-Modul eignet sich hierfür am besten? Das Modul Nodemailer gehört zumindest zu den bekanntesten, doch hält es auch, was es verspricht?

Mehr Infos

"Ich kenne was, was Du nicht kennst"

... ist eine gemeinsame Serie von Golo Roden und Philip Ackermann, in der die beiden regelmäßig Module für JavaScript und Node.js vorstellen.

Liest man sich die Beschreibung des Moduls auf seiner Webseite durch, fällt zunächst die Vielfalt an unterstützten Plattformen, Technologien und Funktionen auf. Nodemailer beherrscht unter anderem Unicode, HTML-basierte E-Mails, Anhänge wie auch eingebettete Bilder und SSL-Verschlüsselung.

Darüber hinaus ist interessant, dass der Versand von E-Mails nicht zwingend direkt per SMTP erfolgen muss. Stattdessen kann Nodemailer E-Mail-Dienste wie SendGrid, Mailgun, Gmail und Hotmail direkt ansprechen und erspart dem Entwickler auf dem Weg lästige Konfigurationsaufgaben.

Egal für welchen Dienst man sich entscheidet, ist das Vorgehen innerhalb von Nodemailer stets gleich: Zunächst muss eine Verbindung zu dem gewünschten Dienst hergestellt werden, über die sich anschließend eine oder mehrere E-Mails versenden lassen. Vor dem eigentlichen Versand sind noch die Versandoptionen festzulegen.

Zuallererst muss das Modul Nodemailer jedoch installiert werden, was auf dem üblichen Weg per npm in den lokalen Kontext der Anwendung erfolgt:

$ npm install nodemailer

Anschließend lässt sich das Modul in der Anwendung laden, wozu die require-Funktion dient:

let nodemailer = require('nodemailer');

Das Objekt stellt die Funktion createTransport zur Verfügung, die eine Verbindung zu einem E-Mail-Server aufbaut. Im Fall von SMTP genügt es, den Host und den Port und gegebenenfalls die Anmeldedaten zu übergeben:

let transport = nodemailer.createTransport({
host: 'localhost',
port: 25,
auth: {
user: 'jane.doe@example.com',
pass: 'secret'
}
});

Werden localhost als Host und 25 beziehungsweise 465 als Ports verwendet, können die Angaben jeweils entfallen. Eine Liste aller möglichen Parameter findet sich in der Dokumentation.

Im nächsten Schritt ist eine zu versendende E-Mail zu definieren. Dazu greift Nodemailer auf klassische JavaScript-Objekte zurück, die allerdings über gewisse Eigenschaften wie from, to und subject verfügen müssen.

Unicode wird für alle Eigenschaften unterstützt, sodass sich Sonderzeichen unter anderem im Namen, im Betreff oder im Inhalt unterbringen lassen. Um eine E-Mail an mehrere Empfänger zu senden, können mehrere E-Mail-Adressen kommasepariert aufgezählt werden:

let mail = {
from: 'the native web <no-reply@thenativeweb.io>',
to: 'hello@thenativeweb.io, golo.roden@thenativeweb.io',
subject: '...',
text: '...'
};

Soll anstelle einer Text-E-Mail eine HTML-basierte E-Mail versendet werden, genügt es, die html-Eigenschaft anzugeben. Erfolgt das zusätzlich zur text-Eigenschaft, enthält die E-Mail den Klartext als Fallback für Clients, die mit HTML-E-Mails nicht umgehen können.

Um die E-Mail schließlich zu versenden, ist die Funktion sendMail an der zuvor definierten Verbindung aufzurufen. Die E-Mail ist dabei als Parameter zu übergeben:

transport.sendMail(mail, function (err) {
// ...
});

Alternativ zu einem lokalen SMTP-Server lassen sich auch andere Arten der E-Mail-Zustellung nutzen. Nodemailer kann beispielsweise direkt mit dem MX-Server der Empfänger-Domain kommunizieren. Außerdem stehen Plug-ins zur Verfügung, die unter anderem Amazon SES, SendGrid und Sendmail anbinden.

Wie anfangs erwähnt kann Nodemailer auch komplexe E-Mails versenden, die neben dem eigentlichen Text- oder HTML-basierten Inhalt beispielsweise auch Anhänge und Bilder enthalten. Alle hierfür erforderlichen Optionen sind lediglich weitere Eigenschaften an einem E-Mail-Objekt. Die Dokumentation liefert wiederum einen guten Überblick über die verfügbaren Möglichkeiten.

Wer regelmäßig E-Mails aus einer Node.js-Anwendung heraus versenden muss, ist alles in allem mit Nodemailer sehr gut beraten. Sollen größere Mengen an E-Mails versendet werden, sind allerdings die Hinweise zum Massenversand zu beachten, um nicht direkt als Spamversender angesehen zu werden.

tl;dr: Nodemailer versendet E-Mails und unterstützt unter anderem Unicode, HTML-basierte E-Mails, Anhänge, Bilder und Verschlüsselung. Außerdem kennt das Modul zahlreiche Plug-ins, um verschiedene E-Mail-Dienste direkt anzusprechen. ()