Was ist eine Bounce-Adresse?
Eine Bounce-Adresse, auch Return-Pfad oder Envelope-Sender genannt, ist die Email-Adresse die Non-Delivery-Reports (NDRs) empfängt wenn Email nicht zugestellt werden kann. Diese Adresse ist separat vom "From" Header sichtbar zum Empfänger und wird ausschließlich für automatisierte Zustellungs-Benachrichtigungen genutzt.
Wie Bounce-Adressen funktionieren
Email-Übertragung nutzt zwei Sätze von Adressen:
Header From (sichtbar zum Empfänger):From: John Doe <john@example.com>
Envelope From (SMTP-Ebene, genutzt für Bounces):
MAIL FROM: <bounces@example.com>
Wenn Zustellung fehlschlägt, sendet der empfangende Server den Bounce zum Envelope-Sender, nicht zum Header-From.
SMTP-Konversations-Beispiel
Client: MAIL FROM: <bounces@example.com>
Server: 250 OK
Client: RCPT TO: <invalid@recipient.com>
Server: 550 Kein solcher Benutzer hier
Client: QUIT
# Später sendet Server Bounce zu bounces@example.com
Email-Bounce-Typen
Hard Bounces
Permanente Zustellungs-Fehler:
- Benutzer existiert nicht: 550 Kein solcher Benutzer
- Domain existiert nicht: 550 Domain nicht gefunden
- Von Richtlinie abgelehnt: 550 Spam blockiert
Soft Bounces
Temporäre Fehler:
- Postfach voll: 452 Unzureichend Speicher
- Server vorübergehend nicht verfügbar: 421 Service nicht verfügbar
- Nachricht zu groß: 552 Nachrichtengröße überschreitet Limit
Block Bounces
Zustellbarkeits-Probleme:
- IP Blacklisted: 554 Service nicht verfügbar; Sender-IP blockiert
- Content als Spam gefiltert: 550 Spam-Score zu hoch
- Rate Limiting: 450 Zu viele Emails
Bounce-Adresse-Konfiguration
Setzen Return-Pfad in Email-Headers
PHP (mail function):$to = "recipient@example.com";
$subject = "Test Email";
$message = "Email-Text";
$headers = "From: sender@example.com\r\n";
$headers .= "Return-Path: bounces@example.com\r\n";
mail($to, $subject, $message, $headers, "-f bounces@example.com");
PHPMailer:
$mail = new PHPMailer();
$mail->From = "sender@example.com";
$mail->Sender = "bounces@example.com"; // Return-Pfad
$mail->addAddress("recipient@example.com");
$mail->Subject = "Test Email";
$mail->send();
Postfix (SMTP):
# /etc/postfix/main.cf
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# /etc/postfix/sender_canonical
@example.com bounces@example.com
# Änderungen anwenden
postmap /etc/postfix/sender_canonical
systemctl reload postfix
Dedizierte Bounce-Handlings-Services
Die meisten Email-Service-Provider bieten Bounce-Verwaltung:
Amazon SES:{
"Message": {
"Subject": "Test",
"From": "sender@example.com",
"ReturnPath": "bounces@example.com"
}
}
SendGrid:
const msg = {
to: 'recipient@example.com',
from: 'sender@example.com',
replyTo: 'reply@example.com',
return_path: 'bounces@example.com',
subject: 'Test Email',
text: 'Email-Text'
};
Bounce-Adresse-Naming-Konventionen
Subdomain-Ansatz
bounces@example.com # Allgemeine Bounces
no-reply@example.com # No-Reply-Emails
returns@example.com # Returns/Receipts
Kampagnen-spezifisch
Verfolge Bounces pro Kampagne:
bounces-newsletter@example.com
bounces-campaign-123@example.com
bounces-transaction@example.com
Variable Envelope Return Path (VERP)
Codere Empfänger in Bounce-Adresse:
Senden zu: user@recipient.com
Return-Pfad: bounces+user=recipient.com@example.com
Wenn Bounce bei bounces+* ankommt, parse um fehlgeschlagenen Empfänger zu identifizieren
Verarbeite Bounce-Nachrichten
Automatisierte Bounce-Analyse
Python Beispiel:import email
from email import policy
def parse_bounce(raw_email):
msg = email.message_from_string(raw_email, policy=policy.default)
# Extrahiere Bounce-Typ
if "550" in msg.get_payload():
return "hard_bounce"
elif "452" in msg.get_payload():
return "soft_bounce"
# Extrahiere fehlgeschlagener Empfänger
for part in msg.walk():
if part.get_content_type() == "message/delivery-status":
# Parse Zustellungs-Status
pass
return bounce_info
# Integriere mit Mailing-Liste um Hard-Bounces zu entfernen
Webhook-basierte Bounce-Handlung
Moderne ESPs bieten Webhooks:
SendGrid Webhook:POST /bounce-webhook
{
"email": "recipient@example.com",
"event": "bounce",
"reason": "550 5.1.1 Benutzer unbekannt",
"type": "blocked",
"status": "5.0.0"
}
Maßnahme: Aktualisiere Datenbank um Email als Bounced zu markieren.
SPF und Bounce-Adressen
SPF prüft Envelope-Sender (Bounce-Adresse), nicht From-Header:
Nachricht:
From: newsletter@example.com (Header)
Return-Path: bounces@mail-server.com (Envelope)
SPF-Prüfung:
Fragt: mail-server.com TXT-Datensatz ab (nicht example.com)
Muss senden-IP in mail-server.coms SPF beinhalten
Bounce-Domain SPF-Konfiguration
bounces.example.com. IN TXT "v=spf1 include:_spf.sendgrid.net ~all"
Sicherstellen Ihre Bounce-Subdomain hat angemessene SPF-Datensätze für Ihre Sende-Infrastruktur.
Bounce-Adresse Best Practices
Nutze dedizierte Bounce-Adresse
Nutze nie Ihre Primär-Email für Bounces:
# Schlecht
Return-Path: info@example.com
# Gut
Return-Path: bounces@example.com
Überwache Bounce-Raten
| Bounce-Rate | Bewertung | Maßnahme |
|---|---|---|
| < 2% | Gesund | Weiterhin überwachen |
| 2-5% | Besorgniserregend | Audit Email-Listen-Qualität |
| 5-10% | Arm | Sofortige Listen-Bereinigung nötig |
| > 10% | Kritisch | Zustellbarkeit gefährdet |
Implementiere Bounce-Verarbeitung
Automatisiere Entfernung von Hard-Bounces:
-- Markiere Emails mit Hard-Bounces
UPDATE mailing_list
SET status = 'bounced', bounce_count = bounce_count + 1
WHERE email IN (SELECT email FROM recent_hard_bounces);
-- Entferne nach 3 Hard-Bounces
DELETE FROM mailing_list
WHERE bounce_count >= 3;
Trenne Transaktions- und Marketing-Bounces
transactional-bounces@example.com # Bestätigungen, Receipts
marketing-bounces@example.com # Newsletter, Kampagnen
Unterschiedliche Bounce-Raten werden für jede Art erwartet.
Richte Bounce-Verarbeitungs-Automatisierung auf
Cron-Job Beispiel:#!/bin/bash
# Verarbeite Bounces jede Stunde
# Hole Bounces von IMAP
fetchmail -c /etc/fetchmailrc
# Parse und update Datenbank
/usr/local/bin/process-bounces.py
# Räume verarbeitete Bounces älter als 30 Tage auf
find /var/mail/bounces -mtime +30 -delete
Backscatter und Bounce-Sicherheit
Backscatter-Problem
Wenn Ihr Server Spam akzeptiert und dann bounct, sendet Sie zu gefälschten Adressen:
1. Spammer sendet Email mit gefälschtem From
2. Ihr Server akzeptiert es
3. Ihr Server realisiert es ist Spam/ungültig
4. Ihr Server bounced zu gefälschtem From
5. Unschuldige Partei empfängt Bounce (Backscatter)
Lösung: Lehne bei SMTP-Zeit ab, nicht akzeptieren dann Bounce:
# Postfix: Lehne unbekannte Benutzer bei SMTP-Zeit ab
smtpd_recipient_restrictions = reject_unauth_destination
local_recipient_maps = hash:/etc/postfix/local_recipients
Bounce-Fälschung
Angreifer können Bounce-Nachrichten fälschen um zu:
- Gültige Adressen zu ernten
- Spam als Bounces zuzustellen
- Phish-Kredentiale über gefälschte Zustellungsberichte
- Prüfe Bounce stammt von MX-Server
- Verifiziere Bounce ist für Email die Sie tatsächlich sendeten
- Parse Delivery-Status-Headers sorgfältig
Häufige Bounce-Szenarien
Szenario 1: Alle Emails Bouncing
Ursache: SPF-Fehler, IP-Blacklist oder Server-Reputation Prüfen: SPF-Datensätze, Sender-IP-Reputation, DMARC-ReportsSzenario 2: Bounces werden nicht empfangen
Ursache: Bounce-Adresse falsch konfiguriert oder existiert nicht Prüfen: MX-Datensätze für Bounce-Domain, Postfach existiertSzenario 3: Hohe Soft-Bounce-Rate
Ursache: Empfänger-Server überlastet, Rate-Limiting, große Nachrichten Prüfen: Sende-Rate, Nachrichtengröße, Empfänger-Server-FehlerSzenario 4: Bounce-Loops
Ursache: Bounce-Adresse triggert Auto-Reply, was weiteren Bounce triggert Prüfen: Deaktiviere Auto-Responder auf Bounce-AdressenTest Bounce-Handlung
Sende Test-Email mit ungültigem Empfänger:# Test-Bounce zu ungültiger Adresse
swaks --to invalid-user@test-domain.com \
--from bounces@example.com \
--server mx.test-domain.com
# Prüfe ob Bounce bei bounces@example.com ankommt
Verifiziere SPF für Bounce-Domain:
dig bounces.example.com TXT
# Sollte SPF-Datensatz mit autorisierten Sendern zeigen
Ordnungsgemäße Bounce-Adresse-Verwaltung ist kritisch zur Aufrechterhaltung von Sender-Reputation, Listen-Hygiene und Zustellbarkeit.