E-Mail-Versand
SubscribeFlow sendet E-Mails über Resend. Sie schreiben Templates in MJML, senden transaktionale E-Mails an einzelne Empfänger und führen Campaigns durch, um getaggte Segmente Ihrer Subscriber-Basis zu erreichen.
Templates
Templates verwenden MJML für responsives E-Mail-Markup. Variablen werden mit der Syntax {{variable_name}} eingefügt.
Template erstellen
template = await client.templates.create(
name="Welcome Email",
subject="Willkommen bei {{company}}, {{name}}!",
mjml_content="""
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text>Hallo {{name}}, willkommen bei {{company}}!</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>
""",
category="transactional",
)
print(f"Template erstellt: {template.slug}")
const template = await client.templates.create({
name: 'Welcome Email',
subject: 'Willkommen bei {{company}}, {{name}}!',
mjml_content: `
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text>Hallo {{name}}, willkommen bei {{company}}!</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>
`,
category: 'transactional',
});
console.log('Template erstellt:', template.slug);
curl -X POST https://api.subscribeflow.net/api/v1/templates \
-H "X-API-Key: sf_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Email",
"subject": "Willkommen bei {{company}}, {{name}}!",
"mjml_content": "<mjml><mj-body><mj-section><mj-column><mj-text>Hallo {{name}}, willkommen bei {{company}}!</mj-text></mj-column></mj-section></mj-body></mjml>",
"category": "transactional"
}'
Template-Vorschau
Rendern Sie ein Template mit Beispielvariablen, bevor Sie es senden.
Transaktionale E-Mail senden
Transaktionale E-Mails werden sofort an einen einzelnen Empfänger gesendet.
Tip
Verwenden Sie idempotency_key, um doppelte Sendungen zu vermeiden. Bei einer erneuten Anfrage mit demselben Key gibt SubscribeFlow das ursprüngliche Ergebnis zurück, anstatt erneut zu senden.
Campaigns
Campaigns senden ein Template an alle Subscriber, die einem Tag-Filter entsprechen. Der Workflow ist: Entwurf erstellen, Tag-Filter konfigurieren, Empfängeranzahl prüfen und senden.
Campaign erstellen
Empfängeranzahl prüfen
Prüfen Sie vor dem Versand, wie viele Subscriber die Campaign erhalten werden.
Senden und überwachen
# Senden
result = await client.campaigns.send("campaign-id")
print(f"Versand an {result.total_recipients} Empfaenger")
# Status spaeter pruefen
campaign = await client.campaigns.get("campaign-id")
print(f"Status: {campaign.status}")
# Bei Bedarf abbrechen
await client.campaigns.cancel("campaign-id")
// Senden
const result = await client.campaigns.send('campaign-id');
console.log(`Versand an ${result.total_recipients} Empfaenger`);
// Status spaeter pruefen
const campaign = await client.campaigns.get('campaign-id');
console.log('Status:', campaign.status);
// Bei Bedarf abbrechen
await client.campaigns.cancel('campaign-id');
# Senden
curl -X POST https://api.subscribeflow.net/api/v1/campaigns/CAMPAIGN_ID/send \
-H "X-API-Key: sf_live_..."
# Status pruefen
curl https://api.subscribeflow.net/api/v1/campaigns/CAMPAIGN_ID \
-H "X-API-Key: sf_live_..."
# Abbrechen
curl -X POST https://api.subscribeflow.net/api/v1/campaigns/CAMPAIGN_ID/cancel \
-H "X-API-Key: sf_live_..."
E-Mail-Triggers
Triggers senden automatisch eine E-Mail, wenn ein bestimmtes Ereignis eintritt -- zum Beispiel eine Willkommens-E-Mail bei jeder neuen Registrierung.
const trigger = await client.triggers.create({
event_type: 'subscriber.created',
template_id: 'welcome-template-uuid',
description: 'Willkommens-E-Mail bei Registrierung senden',
});
console.log('Trigger aktiv:', trigger.id);
// Trigger deaktivieren
await client.triggers.update('trigger-id', { is_active: false });
Hands-On: Ihre erste Campaign senden
Erstellen Sie ein Template, richten Sie eine Campaign ein und senden Sie sie an Ihre Newsletter-Subscriber.
import asyncio
from subscribeflow import SubscribeFlowClient
async def main():
async with SubscribeFlowClient(api_key="sf_live_...") as client:
# 1. Template erstellen
template = await client.templates.create(
name="Erster Newsletter",
subject="Hallo von {{company}}!",
mjml_content="""
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text font-size="20px">
Hallo von {{company}}!
</mj-text>
<mj-text>
Dies ist unser erster Newsletter. Danke fürs Abonnieren!
</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>
""",
category="marketing",
)
# 2. Campaign erstellen
campaign = await client.campaigns.create(
name="Erster Newsletter",
template_id=template.id,
tag_filter={"include_tags": ["newsletter"], "match": "any"},
)
# 3. Empfaenger pruefen
count = await client.campaigns.count_recipients(
include_tags=["newsletter"],
)
print(f"Wird an {count} Subscriber gesendet")
# 4. Senden
result = await client.campaigns.send(campaign.id)
print(f"Campaign an {result.total_recipients} Empfaenger gesendet")
asyncio.run(main())
import { SubscribeFlowClient } from '@subscribeflow/sdk';
const client = new SubscribeFlowClient({
apiKey: 'sf_live_...',
});
// 1. Template erstellen
const template = await client.templates.create({
name: 'Erster Newsletter',
subject: 'Hallo von {{company}}!',
mjml_content: `
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text font-size="20px">
Hallo von {{company}}!
</mj-text>
<mj-text>
Dies ist unser erster Newsletter. Danke fürs Abonnieren!
</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>
`,
category: 'marketing',
});
// 2. Campaign erstellen
const campaign = await client.campaigns.create({
name: 'Erster Newsletter',
template_id: template.id,
tag_filter: { include_tags: ['newsletter'], match: 'any' },
});
// 3. Empfaenger pruefen
const count = await client.campaigns.countRecipients(campaign.id);
console.log(`Wird an ${count.count} Subscriber gesendet`);
// 4. Senden
const result = await client.campaigns.send(campaign.id);
console.log(`Campaign an ${result.total_recipients} Empfaenger gesendet`);
# 1. Template erstellen (ID aus der Antwort speichern)
TEMPLATE_ID=$(curl -s -X POST https://api.subscribeflow.net/api/v1/templates \
-H "X-API-Key: sf_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Erster Newsletter",
"subject": "Hallo von {{company}}!",
"mjml_content": "<mjml><mj-body><mj-section><mj-column><mj-text>Hallo von {{company}}!</mj-text></mj-column></mj-section></mj-body></mjml>",
"category": "marketing"
}' | jq -r '.id')
# 2. Campaign erstellen
CAMPAIGN_ID=$(curl -s -X POST https://api.subscribeflow.net/api/v1/campaigns \
-H "X-API-Key: sf_live_..." \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Erster Newsletter\",
\"template_id\": \"$TEMPLATE_ID\",
\"tag_filter\": {\"include_tags\": [\"newsletter\"], \"match\": \"any\"}
}" | jq -r '.id')
# 3. Senden
curl -X POST "https://api.subscribeflow.net/api/v1/campaigns/$CAMPAIGN_ID/send" \
-H "X-API-Key: sf_live_..."