Account-Lifecycle-Mails — Welcome-Sequenzen, Trial-Erinnerungen, Onboarding-Flows, Re-Engagement — sind das Rückgrat moderner SaaS-Operations. Im Unterschied zu reinen transactional Mails sind Lifecycle-Mails event-getrieben mit komplexer Logik.
Was Account-Lifecycle-Mails ausmacht
Transactional Mails sind reaktiv — eine konkrete Aktion löst eine konkrete Mail aus. Account-Lifecycle-Mails sind proaktiv und zustandsbehaftet — die Versand-Entscheidung hängt vom aktuellen Account-Zustand und der Versand-Geschichte ab.
Beispiel-Sequenz: SaaS-Trial-Onboarding über 14 Tage:
- Tag 0: Welcome-Mail (sofort nach Registrierung)
- Tag 2: Erinnerung "Onboarding wartet" — nur wenn Schritte unvollständig
- Tag 5: Feature-Highlight — nur wenn Account aktiv
- Tag 10: Trial-Mid-Point-Check mit Personalisierung
- Tag 13: Trial-Expiry-Warnung — nur wenn nicht konvertiert
- Tag 14: Trial-Ende mit Conversion-Path
Architektur-Optionen
Option A: Marketing-Plattform übernimmt. HubSpot, ActiveCampaign. Vorteil: kein Engineering-Aufwand. Nachteil: Lock-in.
Option B: Eigene Lifecycle-Engine. Maximale Flexibilität, aber Engineering-Aufwand.
Option C: Hybrid. Eigene Engine für transactional + tightly-coupled lifecycle, Marketing-Plattform für Re-Engagement. Häufig wirtschaftlich beste Lösung.
Engineering-Pattern für eigene Lifecycle-Engine
1. SequenceDefinitions: deklarative Beschreibung der Sequenzen
2. SequenceEnrollments: welche Accounts in welchen Sequenzen
3. ScheduledMessages: geplante Mails mit Eval-Bedingungen
4. Scheduler: läuft regelmäßig, prüft Bedingungen, sendet Mails
5. EngagementTracker: konsumiert Webhooks, updated Account-State
6. SuppressionService: zentrale Suppression-Verwaltung
SequenceDefinitions als Daten-Modell
{
"sequence_id": "trial_onboarding_v3",
"trigger_event": "user.signed_up",
"messages": [
{
"step": 1,
"delay_after_trigger": "0d",
"template": "trial_welcome",
"send_condition": "always"
},
{
"step": 2,
"delay_after_trigger": "2d",
"template": "trial_onboarding_reminder",
"send_condition": "user.onboarding_complete == false"
}
],
"abort_conditions": [
"user.unsubscribed",
"user.has_replied_to_sequence"
]
}
Scheduler-Logik
def scheduler_tick():
due_messages = ScheduledMessage.find(
scheduled_for__lte=datetime.now(),
status='pending'
)
for msg in due_messages:
with db.transaction():
msg.lock(timeout=30)
if check_abort_conditions(msg.user_id, msg.sequence_id):
msg.status = 'aborted'
continue
if not eval_send_condition(msg.send_condition, msg.user_id):
msg.status = 'skipped'
continue
user = User.get(msg.user_id)
if SuppressionService.is_suppressed(user.email, msg.template):
msg.status = 'suppressed'
continue
try:
response = email_api.send(
to=user.email,
template=msg.template,
template_data=build_template_data(user, msg.sequence_id),
idempotency_key=f'seq-{msg.sequence_id}-{msg.user_id}-{msg.step}-v1'
)
msg.status = 'sent'
msg.message_id = response['message_id']
schedule_next_step(msg)
except Exception as e:
msg.retry_count += 1
if msg.retry_count > 5:
msg.status = 'failed'
Engagement-Tracking für Sequenz-Pause
def handle_email_event(event):
if event['event'] == 'replied':
custom_args = event['custom_args']
Enrollment.find(
user_id=custom_args['user_id'],
sequence_id=custom_args['sequence_id']
).update(status='paused_replied')
ScheduledMessage.find(
user_id=custom_args['user_id'],
sequence_id=custom_args['sequence_id'],
status='pending'
).update(status='aborted')
elif event['event'] == 'unsubscribed':
SuppressionService.add(event['recipient_email'])
Operational Excellence
Beobachtbarkeit: Per-Sequenz-Metriken — wie viele User aktiv, Conversion-Rates pro Schritt, Abbrüche.
A/B-Tests: jede Sequenz kann mehrere Varianten haben.
Sequenz-Versionierung: wenn Sequenz geändert wird, neue Version. Bestehende Enrollments laufen mit alter Version weiter.
Templates trennen vom Versand-Code: Marketing kann Templates ändern ohne Engineering-Beteiligung.
DACH-spezifische Aspekte
Aus DSGVO-Perspektive: Lifecycle-Mails basieren auf Vertragsdurchführung (Art. 6 Abs. 1 lit. b) oder berechtigtem Interesse (Art. 6 Abs. 1 lit. f). Bei Marketing-orientierten Mails wird Einwilligung notwendig.
Für UWG §7-Compliance: Empfänger müssen jederzeit einfach abmelden können. Die Abmeldung muss alle aktiven Sequenzen sofort beenden.
Lifecycle-Engine für Ihre SaaS planen?
Bei Authorize Hosting unterstützen wir bei Architektur-Entscheidung und Engineering-Pattern für robuste Lifecycle-Operations.