Produkt
Dieser umfassende Leitfaden führt Sie durch den Aufbau eines sicheren, skalierbaren Double-Opt-in-Abonnementprozesses (DOI) mit der E-Mail-API v3.1 von Mailjet.
Sie erfahren, wie Sie signierte Bestätigungslinks, E-Mail-Vorlagen, Webhooks und Kontaktsynchronisierung implementieren, um ein DSGVO-konformes Abonnementsystem zu erstellen, das die Zustellbarkeit und Nutzerinteraktionen verbessert.
Double-Opt-in ist ein zweistufiger Anmeldeprozess, bei dem die Nutzer zunächst Ihr Formular abschicken und dann ihre Anmeldung über einen Link in ihrem E-Mail-Posteingang bestätigen. Erst nach dieser Bestätigung werden sie in Ihre E-Mail-Liste aufgenommen.
| Methode | Schritte | Anmeldevolumen | Qualität | Compliance |
|---|---|---|---|---|
| Single-Opt-in | Ein Schritt | Höher | Niedriger (Tippfehler, Bots) | Grundlegend |
| Double-Opt-in | Zwei Schritte | Niedriger | Viel höher | DSGVO-bereit |
Am Ende dieses Leitfadens werden Sie Folgendes implementiert haben:
Bevor Sie loslegen, vergewissern Sie sich, dass Sie über Folgendes verfügen:
So funktioniert das Double-Opt-in-Verfahren:
Hier finden Sie einen Schritt-für-Schritt-Leitfaden für die Verwendung der E-Mail-API von Mailjet.
Beginnen Sie mit der Validierung und Speicherung der ersten Abonnementanfrage:
// Beispiel Validierung
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
return { error: 'Invalid email format' };
}
// Ausstehendes Abonnement speichern
await db.subscriptions.create({
email: email,
status: 'pending',
created_at: new Date(),
ip_address: req.ip
});
Sicherheit ist entscheidend; verwenden Sie niemals MD5 oder einfache Hashes. Implementieren Sie stattdessen eine angemessene Token-Sicherheit:
const jwt = require('jsonwebtoken');
const crypto = require('crypto');
function createConfirmationToken(email) {
const nonce = crypto.randomBytes(16).toString('hex');
const payload = {
email: email,
nonce: nonce,
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + (60 * 60) // 1 Stunde
};
return jwt.sign(payload, process.env.JWT_SECRET);
}
const token = createConfirmationToken('user@example.com');
const confirmUrl = `https://yourapp.com/confirm?token=${token}`;
Verwenden Sie die Mailjet Send API v3.1, um die Bestätigungs-E-Mail zu versenden. Sie haben zwei Möglichkeiten:
Erstellen Sie zunächst Ihre Vorlage in Mailjet und senden Sie dann:
curl -s -X POST \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3.1/send \
-H 'Content-Type: application/json' \
-d '{
"Messages":[
{
"From":{"Email":"no-reply@yourdomain.com","Name":"Ihre Marke"},
"To":[{"Email":"recipient@example.com","Name":"Empfänger"}],
"TemplateID": 123456,
"TemplateLanguage": true,
"Subject": "Bitte bestätigen Sie Ihr Abonnement",
"Variables": {
"confirm_url": "https://yourapp.com/confirm?token=...signed...",
"first_name": "Alex"
}
}
]
}'
curl -s -X POST \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3.1/send \
-H 'Content-Type: application/json' \
-d '{
"Messages":[
{
"From":{"Email":"no-reply@yourdomain.com","Name":"Ihre Marke"},
"To":[{"Email":"recipient@example.com"}],
"Subject":"Bestätigen Sie Ihr Abonnement",
"TextPart":"Tippen zum Bestätigen: {{var:confirm_url}}",
"HTMLPart":"<p>Fast geschafft! <a href="%5C%22%7B%7Bvar:confirm_url%7D%7D%5C%22">Bestätigen Sie Ihr Abonnement</a>.</p>",
"TemplateLanguage": true,
"Variables":{"confirm_url":"https://yourapp.com/confirm?token=..."}
}
]
}'
Ihr Bestätigungsendpunkt muss die Token sicher verifizieren:
app.get('/confirm', async (req, res) => {
const { token } = req.query;
try {
// Überprüfen der Token-Signatur und des Ablaufzeitpunkts
const decoded = jwt.verify(token, process.env.JWT_SECRET);
// Prüfen, ob das Token bereits verwendet wurde
const existingUse = await db.used_tokens.findOne({
token_hash: crypto.createHash('sha256').update(token).digest('hex')
});
if (existingUse) {
return res.status(400).send('Token already used');
}
// Token als verwendet markieren
await db.used_tokens.create({
token_hash: crypto.createHash('sha256').update(token).digest('hex'),
used_at: new Date()
});
// Fortfahren mit der Anmeldung
await subscribeToMailjet(decoded.email);
res.send('Abonnement erfolgreich bestätigt!');
} catch (error) {
res.status(400).send('Ungültiger oder abgelaufener Bestätigungslink");
}
});
Sobald das Token verifiziert ist, fügen Sie den Kontakt zu Ihrer Mailjet-Liste hinzu:
curl -s -X POST \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3/REST/contact \
-H 'Content-Type: application/json' \
-d '{
"Email":"recipient@example.com",
"Name":"Empfängername"
}'
curl -s -X POST \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3/REST/listrecipient \
-H 'Content-Type: application/json' \
-d '{
"ContactAlt":"recipient@example.com",
"ListID": 123456
}'
curl -s -X PUT \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3/REST/contactdata/recipient@example.com \
-H 'Content-Type: application/json' \
-d '{
"Data":[
{"Name":"first_name","Value":"Alex"},
{"Name":"city","Value":"Musterstadt"}
]
}'
Hinweis: Definieren Sie zunächst benutzerdefinierte Kontakteigenschaften mit dem contactmetadata-Endpunkt, wenn diese noch nicht vorhanden sind.
Nach erfolgreicher Anmeldung senden Sie eine Begrüßungs-E-Mail mit demselben Send API v3.1-Muster wie in Schritt 3.
Richten Sie Webhooks ein, um Echtzeit-Ereignisse für die laufende Listenhygiene zu erhalten:
curl -s -X POST \
--user "$MJ_APIKEY_PUBLIC:$MJ_APIKEY_PRIVATE" \
https://api.mailjet.com/v3/REST/eventcallbackurl \
-H 'Content-Type: application/json' \
-d '{
"EventType": "sent",
"Url": "https://yourapp.com/webhooks/mailjet"
}'
Verfolgen Sie diese Ereignisse:
Hier finden Sie einige der häufigsten Best Practices.
Speichern Sie die folgenden Informationen zur Einhaltung der DSGVO:
Haben Sie weitere Fragen zu diesem Prozess? Lesen Sie unsere FAQ.
Ja! Erstellen Sie einen „resend“-Endpunkt, der das alte Token ungültig macht und ein neues mit neuem Ablaufdatum ausstellt.
Sie können Bestätigungen erneut senden. Verwenden Sie beim Klick den Endpunkt listrecipient, um sicherzustellen, dass sie sich in der richtigen Liste befinden.
Die Abfragezeichenfolge ist typisch und leichter zu parsen. Loggen Sie niemals rohe Token in Analysen.
Der Form-Editor eignet sich hervorragend für den schnellen Einsatz. Nutzen Sie diese API-Methode für personalisierte Erlebnisse in großem Maßstab.
Mit dieser Implementierung verfügen Sie über ein robustes, sicheres und gesetzeskonformes Double-Opt-in-System, das Ihre Absender-Reputation schützt und gleichzeitig einen hochwertigen Abonnentenstamm aufbaut.