MailLandDocs
Analytik

E-Mail-Protokolle

Suchen, filtern und inspizieren Sie detaillierte Zustellprotokolle für jede über Mail.Land gesendete E-Mail

Diese Seite listet nur transaktionale Nachrichten auf: Kampagnen- und Automatisierungs-E-Mails (einschließlich sys_*-Systemnachrichten) sind ausgeschlossen. Verwenden Sie den Endpunkt für Kampagnenempfänger (siehe Kampagnen) für den Marketing-/Automatisierungs-Sendeverlauf.

E-Mails auflisten

GET https://api.mail.land/v1/transactional/logs
List emails
curl "https://api.mail.land/v1/transactional/logs?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Abfrageparameter

ParameterTypStandardBeschreibung
cursorstring-Opaker Cursor aus dem nextCursor der vorherigen Seite. Für die erste Seite weglassen. Ein fehlerhafter oder manipulierter Cursor führt zu 400 INVALID_CURSOR.
limitint20Elemente pro Seite
statusstring-Nach Status filtern (siehe unten)
searchstring-Nach Empfänger, Betreff oder Nachrichten-ID suchen
fromdatetimeVor 30 TagenStartdatum
todatetimeJetztEnddatum
refreshboolfalseEine veraltete Seite vermeiden: es gibt keinen Zählungs-Cache mehr, der umgangen werden müsste

Statusfilter

WertEntspricht
queuedWartet in der Warteschlange
sentVom MTA akzeptiert
deferred oder retryingVorübergehend verzögert
deliveredErfolgreich zugestellt
bouncedDauerhafter Bounce
failedSystemfehler oder Admin-Bounce
openedEmpfänger hat die E-Mail geöffnet
clickedEmpfänger hat auf einen Link geklickt
complainedEmpfänger hat eine Spam-Beschwerde eingereicht
Email logs response
{
  "items": [
    {
      "messageId": "t_a1b2c3d4e5f6",
      "recipient": "[email protected]",
      "subject": "Your order has shipped",
      "status": "delivered",
      "sentAt": "2026-02-17T12:34:56Z",
      "deliveredAt": "2026-02-17T12:34:58Z",
      "openedAt": "2026-02-17T13:15:00Z",
      "clickedAt": null,
      "bounceReason": null,
      "openCount": 2,
      "clickCount": 0
    },
    {
      "messageId": "t_d4e5f6a1b2c3",
      "recipient": "[email protected]",
      "subject": "Invoice #1234",
      "status": "bounced",
      "sentAt": "2026-02-17T12:30:00Z",
      "deliveredAt": null,
      "openedAt": null,
      "clickedAt": null,
      "bounceReason": "550 5.1.1 Mailbox not found",
      "openCount": 0,
      "clickCount": 0
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

Statusprioritäten

Das Feld status spiegelt das Ereignis mit der höchsten Priorität für jede E-Mail wider:

  1. complained (höchste)
  2. clicked
  3. opened
  4. Zustellungsstatus: queued → sent → deferred → delivered → bounced → failed

Wurde eine E-Mail beispielsweise zugestellt und dann geöffnet, zeigt der Status opened.

Aus Leistungsgründen wird standardmäßig ein 30-tägiger Datumsbereich angewendet. Der Suchparameter filtert nach Empfänger-E-Mail, Betreffzeile oder Nachrichten-ID (Groß-/Kleinschreibung wird nicht berücksichtigt).

Protokollstatistiken

Aggregierte Statistiken für Ihre E-Mail-Protokolle abrufen:

GET https://api.mail.land/v1/transactional/logs/stats
Get log stats
curl "https://api.mail.land/v1/transactional/logs/stats" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParameterTypStandardBeschreibung
fromdatetimeVor 7 TagenStartdatum
todatetimeJetztEnddatum
emailTypeint-0 = Transaktional, 1 = Marketing. Weglassen deckt alle E-Mail-Typen ab: anders als "E-Mails auflisten" oben, das nur Transaktional zeigt.
refreshboolfalseCache umgehen
Log stats response
{
  "total": 4750,
  "accepted": 4750,
  "sent": 4700,
  "delivered": 4680,
  "opened": 1498,
  "clicked": 195,
  "bounced": 38,
  "complained": 1,
  "failed": 12,
  "queued": 20,
  "deliveryRate": 99.57,
  "openRate": 32.01,
  "clickRate": 13.02,
  "bounceRate": 0.81,
  "complaintRate": 0.021,
  "source": "clickhouse",
  "queryTimeMs": 32
}

Ratenberechnungen:

RateFormel
deliveryRatedelivered / sent * 100
openRateopened / delivered * 100
clickRateclicked / delivered * 100
bounceRatebounced / sent * 100
complaintRatecomplained / sent * 100 (3 Dezimalstellen)

Antwortheader zeigen den Cache-Status an:

HeaderWerte
X-CacheHIT, MISS oder FRESH
X-Stats-Sourcecache oder clickhouse
Cache-ControlImmer no-store, no-cache, must-revalidate

E-Mail-Detail

Vollständige Details für eine bestimmte E-Mail einschließlich der Ereignis-Zeitachse abrufen:

GET https://api.mail.land/v1/transactional/logs/{messageId}
Get email detail
curl https://api.mail.land/v1/transactional/logs/t_a1b2c3d4e5f6 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Email detail response
{
  "messageId": "t_a1b2c3d4e5f6",
  "recipient": "[email protected]",
  "fromEmail": "[email protected]",
  "subject": "Your order has shipped",
  "status": "opened",
  "sentAt": "2026-02-17T12:34:56Z",
  "deliveredAt": "2026-02-17T12:34:58Z",
  "openedAt": "2026-02-17T13:15:00Z",
  "clickedAt": null,
  "createdAt": "2026-02-17T12:34:55Z",
  "bounceReason": null,
  "bounceCategory": null,
  "ipAddress": null,
  "retryCount": 0,
  "smtpResponse": "250 2.0.0 OK",
  "openCount": 2,
  "clickCount": 0,
  "htmlContent": "<html>...</html>",
  "textContent": "Your order has shipped...",
  "events": [
    {
      "eventType": "delivered",
      "timestamp": "2026-02-17T12:34:58Z",
      "ipAddress": null,
      "userAgent": null,
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": "250 2.0.0 OK",
      "deviceType": null,
      "browser": null,
      "country": null,
      "city": null
    },
    {
      "eventType": "opened",
      "timestamp": "2026-02-17T13:15:00Z",
      "ipAddress": "203.0.113.45",
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": null,
      "deviceType": "desktop",
      "browser": "Chrome",
      "country": "US",
      "city": "San Francisco"
    },
    {
      "eventType": "opened",
      "timestamp": "2026-02-17T14:30:00Z",
      "ipAddress": "203.0.113.45",
      "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)",
      "linkUrl": null,
      "bounceType": null,
      "bounceReason": null,
      "smtpResponse": null,
      "deviceType": "mobile",
      "browser": "Safari",
      "country": "US",
      "city": "San Francisco"
    }
  ]
}

Das Array events stammt aus ClickHouse und ist nach Zeitstempel sortiert. Falls ClickHouse vorübergehend nicht verfügbar ist, werden die E-Mail-Details trotzdem aus PostgreSQL zurückgegeben, aber events ist ein leeres Array.

Ereignisfelder

FeldBeschreibung
eventTypedelivered, opened, clicked, bounced, complained, sowie accepted, sent, deferred, admin_bounce, oob_bounce, expired
timestampZeitpunkt des Ereignisses (UTC)
ipAddressClient-IP (für Öffnungen/Klicks)
userAgentClient-User-Agent-Zeichenfolge
linkUrlGeklickte URL (für clicked-Ereignisse)
bounceTypehard, soft oder unknown (für bounced-Ereignisse)
bounceReasonSMTP-Antwort (für bounced-Ereignisse)
smtpResponseRemote-Server-Antwort (für delivered-Ereignisse)
deviceTypedesktop, mobile oder tablet
browserBrowsername (Chrome, Safari, Firefox usw.)
countryISO-Ländercode
cityStadtname

Fehlgeschlagene E-Mail erneut senden

Zustellung einer zurückgesendeten oder fehlgeschlagenen E-Mail erneut versuchen:

POST https://api.mail.land/v1/transactional/logs/{messageId}/retry
Retry failed email
curl -X POST https://api.mail.land/v1/transactional/logs/t_a1b2c3d4e5f6/retry \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Die Nachricht muss den Status Bounced oder Failed haben, und der Empfänger darf nicht unterdrückt sein.

StatusCodeBeschreibung
200-Wiederholung akzeptiert
400INVALID_REQUESTE-Mail ist nicht zurückgesendet oder fehlgeschlagen
400RECIPIENT_SUPPRESSEDEmpfänger befindet sich auf der Unterdrückungsliste
404RESOURCE_NOT_FOUNDNachricht nicht gefunden: nicht EMAIL_NOT_FOUND
422DOMAIN_NOT_VERIFIEDDie sendende Domain ist nicht mehr verifiziert
429MARKETING_PAUSEDDer Marketingversand ist für diesen Workspace derzeit pausiert
422RETRY_ATTACHMENTS_UNAVAILABLEDie Nachricht hatte Anhänge, die nicht mehr wiederhergestellt werden können; senden Sie sie stattdessen erneut mit den Anhängen
422RETRY_ATTACHMENTS_UNKNOWNDie Nachricht wurde gesendet, bevor Anhänge erfasst wurden, daher kann ein Retry die Anhänge nicht garantieren; senden Sie sie stattdessen erneut
429PLATFORM_CAPACITY_PROTECTIONNeuer Versand ist kurz pausiert, um die Plattformkapazität zu schützen; nichts wurde geändert, versuchen Sie es gleich erneut
503RETRY_ATTACHMENT_STORAGE_UNAVAILABLEDie Anhänge konnten gerade nicht gelesen werden; nichts wurde geändert, versuchen Sie es gleich erneut

Die Wiederholung erstellt einen neuen E-Mail-Job mit dem ursprünglichen Inhalt und stellt ihn zur Zustellung in die Warteschlange. Wiederholte Kopien werden ohne Öffnungs-/Klick-Tracking versendet.

Nächste Schritte

Auf dieser Seite