Zum Inhalt

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.

preview = await client.templates.preview(
    "template-id",
    variables={"company": "Acme Inc", "name": "Alice"},
)
print(preview.html)
const preview = await client.templates.preview('template-id', {
  company: 'Acme Inc',
  name: 'Alice',
});

console.log(preview.html);
curl -X POST https://api.subscribeflow.net/api/v1/templates/TEMPLATE_ID/preview \
  -H "X-API-Key: sf_live_..." \
  -H "Content-Type: application/json" \
  -d '{"variables": {"company": "Acme Inc", "name": "Alice"}}'

Transaktionale E-Mail senden

Transaktionale E-Mails werden sofort an einen einzelnen Empfänger gesendet.

result = await client.emails.send(
    template_slug="welcome-email",
    to="alice@example.com",
    variables={"company": "Acme Inc", "name": "Alice"},
    idempotency_key="welcome-alice-2024",
)
print(f"E-Mail eingereiht: {result.id} (Status: {result.status})")
const result = await client.emails.send({
  template_slug: 'welcome-email',
  to: 'alice@example.com',
  variables: { company: 'Acme Inc', name: 'Alice' },
  idempotency_key: 'welcome-alice-2024',
});

console.log('E-Mail eingereiht:', result.id);
curl -X POST https://api.subscribeflow.net/api/v1/emails/send \
  -H "X-API-Key: sf_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "template_slug": "welcome-email",
    "to": "alice@example.com",
    "variables": {"company": "Acme Inc", "name": "Alice"},
    "idempotency_key": "welcome-alice-2024"
  }'

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

campaign = await client.campaigns.create(
    name="Maerz-Newsletter",
    template_id="template-uuid",
    tag_filter={"include_tags": ["newsletter"], "match": "any"},
)
print(f"Campaign-Entwurf: {campaign.id}")
const campaign = await client.campaigns.create({
  name: 'Maerz-Newsletter',
  template_id: 'template-uuid',
  tag_filter: { include_tags: ['newsletter'], match: 'any' },
});

console.log('Campaign-Entwurf:', campaign.id);
curl -X POST https://api.subscribeflow.net/api/v1/campaigns \
  -H "X-API-Key: sf_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Maerz-Newsletter",
    "template_id": "template-uuid",
    "tag_filter": {"include_tags": ["newsletter"], "match": "any"}
  }'

Empfängeranzahl prüfen

Prüfen Sie vor dem Versand, wie viele Subscriber die Campaign erhalten werden.

count = await client.campaigns.count_recipients(
    include_tags=["newsletter"],
)
print(f"Erreicht {count} Subscriber")
const count = await client.campaigns.countRecipients('campaign-id');
console.log(`Erreicht ${count.count} Subscriber`);
curl https://api.subscribeflow.net/api/v1/campaigns/CAMPAIGN_ID/recipient-count \
  -H "X-API-Key: sf_live_..."

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.

trigger = await client.triggers.create(
    event_type="subscriber.created",
    template_id="welcome-template-uuid",
    description="Willkommens-E-Mail bei Registrierung senden",
)
print(f"Trigger aktiv: {trigger.id}")

# Trigger deaktivieren
await client.triggers.update("trigger-id", is_active=False)
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 });
curl -X POST https://api.subscribeflow.net/api/v1/triggers \
  -H "X-API-Key: sf_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "event_type": "subscriber.created",
    "template_id": "welcome-template-uuid",
    "description": "Willkommens-E-Mail bei Registrierung senden"
  }'

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_..."