Email

Transaktions-E-Mails in einer NodeJS-App über die Mailgun-API versenden

Der Versand von Transaktions-E-Mails ist unabhängig von Ihren Tools ganz einfach. Wenn Sie eine NodeJS-Hilfsbibliothek verwenden, unterstützt Sie diese Anleitung bei der Einrichtung in Mailgun.
Bild für Transaktions-E-Mails in einer NodeJS-App über die Mailgun-API versenden

Sie profitieren nicht nur von leistungsstarkem Re-Engagement basierend auf Triggern, Aktionen und Mustern, sondern kommunizieren auch wichtige Informationen automatisch zwischen Ihrer Plattform und Ihrer Kundschaft.

Es ist sehr wahrscheinlich, dass Sie in Ihrer Laufbahn in der Softwareentwicklung irgendwann automatisierte Transaktions-E-Mails versenden müssen (falls das nicht ohnehin schon der Fall ist), wie zum Beispiel:

  • Bestätigungs-E-Mails
  • Passworterinnerungen

… und viele weitere Arten von Benachrichtigungen.

In diesem Tutorial erfahren Sie, wie Sie Transaktions-E-Mails über die Mailgun-API und eine NodeJS-Hilfsbibliothek versenden.

Wir behandeln dabei verschiedene Szenarien:

  • Versand einer einzelnen Transaktions-E-Mail
  • Versand eines Newsletters an eine E-Mail-Liste
  • Hinzufügen von E-Mail-Adressen zu einer Liste
  • Versand einer Rechnung an eine einzelne E-Mail-Adresse

E-Mails versenden: SMTP oder API 

Beim Versand von E-Mails aus einer Node.js-App können Sie einen direkten SMTP-Client oder eine E-Mail-API verwenden. Bisher nutzten Entwicklungsteams oft Bibliotheken wie Nodemailer, um eine direkte Verbindung zu einem SMTP-Server zu konfigurieren. SMTP bietet zwar Kontrolle, bringt aber einige Nachteile mit sich, wie etwa eine komplexe Konfiguration und eine schlechte Zustellbarkeit. 

Der API-Ansatz, wie ihn auch Mailgun nutzt, vereinfacht den gesamten Prozess. Anstatt das zugrunde liegende Protokoll zu verwalten, stellen Sie lediglich eine einfache HTTP-Anfrage. Die zuverlässige Infrastruktur von Mailgun übernimmt die SMTP-Kommunikation für Sie und sorgt für eine bessere Zustellbarkeit sowie integrierte Funktionen wie Analysen und E-Mail-Validierung. 

Erste Schritte mit Ihrer Node.js-App

Dieser Abschnitt führt Sie durch die Einrichtung Ihres Projekts und die Inbetriebnahme Ihrer App. 

Schritt 1: Projektinitialisierung

Wir gehen davon aus, dass Sie die NodeJS-Umgebung installiert haben und sich damit auskennen. 

Zunächst generieren wir eine package.json-Datei in einem neuen Verzeichnis (in diesem Fall /mailgun_nodetut). Diese Datei enthält Details wie den Projektnamen und die erforderlichen Abhängigkeiten

                                

                                    {
  "name": "mailgun-node-tutorial",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "4",
    "jade": "*",
    "mailgun-js": "0.5"
  }
}
                                
                            

Wie Sie sehen, verwenden wir expressjs für das Grundgerüst unserer Web-App, jade als Template-Engine und schließlich eine von der Community bereitgestellte Node-Bibliothek von bojand

Erstellen Sie im selben Ordner, in dem Sie die package.json-Datei erstellt haben, zwei weitere Ordner: views/ js/ 

Alles ist bereit – melden Sie sich einfach bei Mailgun an (das ist kostenlos, falls Sie noch kein Konto haben) und rufen Sie Ihren API-Schlüssel von der Startseite des Control Panels ab. 

Schritt 2: Eine einfache ExpressJS-App einrichten

Speichern Sie den folgenden Code als app.js im Stammverzeichnis Ihrer App (dort, wo sich package.json befindet) 

                                

                                    //We're using the express framework and the mailgun-js wrapper
var express = require('express');
var Mailgun = require('mailgun-js');
//init express
var app = express();

//Your api key, from Mailgun’s Control Panel
var api_key = 'MAILGUN-API-KEY';

//Your domain, from the Mailgun Control Panel
var domain = 'YOUR-DOMAIN.com';

//Your sending email address
var from_who = 'your@email.com';

//Tell express to fetch files from the /js directory
app.use(express.static(__dirname + '/js'));
//We're using the Jade templating language because it's fast and neat
app.set('view engine', 'jade')

//Do something when you're landing on the first page
app.get('/', function(req, res) {
//render the index.jade file - input forms for humans
res.render('index', function(err, html) {
if (err) {
// log any error to the console for debug
console.log(err); 
}
else { 
//no error, so send the html to the browser
res.send(html)
};
});
});

// Send a message to the specified email address when you navigate to /submit/someaddr@email.com
// The index redirects here
app.get('/submit/:mail', function(req,res) {

//We pass the api_key and domain to the wrapper, or it won't be able to identify + send emails
var mailgun = new Mailgun({apiKey: api_key, domain: domain});

var data = {
//Specify email data
from: from_who,
//The email to contact
to: req.params.mail,
//Subject and text data  
subject: 'Hello from Mailgun',
html: 'Hello, This is not a plain-text email, I wanted to test some spicy Mailgun sauce in NodeJS! <a href="http://0.0.0.0:3030/validate?&apos; + req.params.mail + &apos;">Click here to add your email address to a mailing list</a>'
}

//Invokes the method to send emails given the above data with the helper library
mailgun.messages().send(data, function (err, body) {
//If there is an error, render the error page
if (err) {
res.render('error', { error : err});
console.log("got an error: ", err);
}
//Else we can greet    and leave
else {
//Here "submitted.jade" is the view file for this landing page 
//We pass the variable "email" from the url parameter in an object rendered by Jade
res.render('submitted', { email : req.params.mail });
console.log(body);
}
});

});

app.get('/validate/:mail', function(req,res) {
var mailgun = new Mailgun({apiKey: api_key, domain: domain});

var members = [
{
address: req.params.mail
}
];
//For the sake of this tutorial you need to create a mailing list on Mailgun.com/cp/lists and put its address below
mailgun.lists('NAME@MAILINGLIST.COM').members().add({ members: members, subscribed: true }, function (err, body) {
console.log(body);
if (err) {
res.send("Error - check console");
}
else {
res.send("Added to mailing list");
}
});

})

app.get('/invoice/:mail', function(req,res){
//Which file to send? I made an empty invoice.txt file in the root directory
//We required the path module here..to find the full path to attach the file!
var path = require("path");
var fp = path.join(__dirname, 'invoice.txt');
//Settings
var mailgun = new Mailgun({apiKey: api_key, domain: domain});

var data = {
from: from_who,
to: req.params.mail,
subject: 'An invoice from your friendly hackers',
text: 'A fake invoice should be attached, it is just an empty text file after all',
attachment: fp
};

//Sending the email with attachment109    mailgun.messages().send(data, function (error, body) {
if (error) {
res.render('error', {error: error});
}
else {
res.send("Attachment is on its way");
console.log("attachment sent", fp);
}
});
})

app.listen(3030);
                                
                            

Schritt 3: View- und JavaScript-Dateien erstellen:

Speichern Sie den folgenden Code als index.jade im Verzeichnis /views

                                

                                    doctype html
html
head
title Mailgun Transactional demo in NodeJS
body
p Welcome to a Mailgun form
form(id="mgform")
label(for="mail") Email
input(type="text" id="mail" placeholder="Youremail@address.com")
button(value="bulk" onclick="mgform.hid=this.value") Send transactional
button(value="list" onclick="mgform.hid=this.value") Add to list
button(value="inv" onclick="mgform.hid=this.value") Send invoice
script(type="text/javascript" src="main.js")
                                
                            

Speichern Sie den folgenden Code als error.jade im Verzeichnis /views

                                

                                    doctype html
html
head
title Mailgun Transactional
body
p Well that's awkward: #{error}
                                
                            

Speichern Sie den folgenden Code als main.js im Verzeichnis /js

                                

                                    var vForm = document.getElementById('mgform');
var vInput = document.getElementById('mail');

vForm.onsubmit = function() {
if (this.hid == "bulk") {
location = "/submit/" + encodeURIComponent(vInput.value);
}
if (this.hid == "list") {
location = "/validate/" + encodeURIComponent(vInput.value);
}
if (this.hid == "inv") {
location = "/invoice/" + encodeURIComponent(vInput.value);
}

return false;
}
                                
                            

Erstellen Sie abschließend eine leere invoice.txt-Datei in Ihrem Stammordner. Diese Datei wird als Anhang versendet. 

Schritt 4: Anwendung ausführen

  1. Führen Sie npm install (oder in einigen Fällen sudo npm install, abhängig von Ihrer Installationsmethode) aus, um Abhängigkeiten wie Express herunterzuladen. 
  1. Sobald dies erledigt ist, führen Sie node app.js  aus.
  1. Navigieren Sie in Ihrem Browser zu localhost:3030 (oder 0.0.0.0:3030

Mit diesen drei einfachen Schritten können Sie direkt damit beginnen, Transaktions-E-Mails nach Bedarf zu versenden. 

So funktioniert die App

Das oben Gezeigte ist eine einfache Express-App, die auf Ihrem lokalen Rechner über den Port 3030 ausgeführt wird. Wir haben festgelegt, dass sie expressjs und den mailgun-js-Wrapper verwendet. Dies sind bekannte Bibliotheken, mit denen wir schnell eine kleine Website einrichten können, über die sich per Trigger E-Mails an die eigene Adresse versenden lassen.

Die Endpunkte

Wir haben vier Endpunkte definiert.

  1. /
  2. /submit/:mail
  3. /validate/:mail
  4. /invoice/:mail

Wobei :mail Ihre gültige E-Mail-Adresse ist.

Beim Navigieren zu einem Endpunkt sendet Express eine andere View an den Browser.

Im Hintergrund übernimmt Express die vom Browser bereitgestellte Eingabe und verarbeitet sie mithilfe der mailgun-js-Bibliothek.

Im ersten Fall navigieren wir zum Stammverzeichnis, also zu localhost:3030/

Wie Sie sehen, gibt es ein Eingabefeld, in dem Ihre E-Mail-Adresse abgefragt wird. Auf diese Weise senden Sie sich selbst eine ansprechende Transaktions-E-Mail.

Das liegt daran, dass expressjs Ihre E-Mail-Adresse aus dem URL-Parameter übernimmt und unter Verwendung Ihres API-Schlüssels sowie Ihrer Domain einen API-Aufruf an den Endpunkt durchführt, um E-Mails zu versenden.

Jeder Endpunkt ruft ein anderes Layout auf. Den Code für die grundlegenden Layouts finden Sie weiter unten. Sie können ihn nach Belieben anpassen.

Praxisbeispiele: E-Mails mit der Mailgun-Node.js-API versenden 

In unserem Beispiel haben wir gesehen, wie sich eine Transaktions-E-Mail automatisch versenden lässt, wenn jemand eine bestimmte Aktion auslöst. 

Versand einer einzelnen Transaktions-E-Mail 

Wenn Sie zum Stammverzeichnis localhost:3030/ navigieren, sehen Sie ein Eingabefeld für Ihre E-Mail-Adresse. Auf diese Weise senden Sie sich selbst eine ansprechende Transaktions-E-Mail. 

Hinzufügen von E-Mail-Adressen zu einer Liste 

Der Endpunkt /validate/:mail zeigt, wie sich eine E-Mail-Adresse zu einer Mailingliste hinzufügen lässt. Für dieses Tutorial müssen Sie eine Mailingliste auf Mailgun.com/cp/lists erstellen und deren Adresse in den app.js-Code einfügen. 

Versand einer Rechnung mit Anhang 

Der Endpunkt /invoice/:mail zeigt, wie ein Anhang versendet wird. Wir haben das Pfad-Modul angefordert, um den vollständigen Pfad zu ermitteln, damit die leere invoice.txt-Datei in Ihrem Stammverzeichnis angehängt werden kann. 

Den Node.js-E-Mail-Absender fertigstellen

In unserem Beispiel haben wir gesehen, wie sich eine Transaktions-E-Mail automatisch versenden lässt, wenn eine bestimmte Aktion ausgelöst wird – in unserem speziellen Fall das Absenden des Formulars.

Es gibt Tausende von Anwendungen, an die Sie dieses Szenario anpassen könnten. Der E-Mail-Versand kann für Folgendes genutzt werden:

  • Die Kontoregistrierung auf einer Website sowie eine Willkommensnachricht
  • Das Zurücksetzen eines Passworts
  • Die Bestätigung von Käufen oder kritischen Aktionen (Kontolöschung)
  • Zwei-Faktor-Authentifizierung mit mehreren E-Mail-Adressen

Wofür nutzen Sie Transaktions-E-Mails in Ihrem Geschäftsalltag?