API

E-Mails über REST oder SMTP senden.

onesend bietet eine REST-API und ein direkt einsetzbares SMTP-Relay für Transaktions-E-Mails. EU-souverän, DSGVO-konform, in Deutschland gehostet. Wechseln Sie von Amazon SES, SendGrid, Mailgun oder Postmark, indem Sie nur Host und Schlüssel ändern.

REST-Basis

https://api.onesend.eu

Sende-Endpunkt

POST /v1/email/send

REST-Auth

Authorization: Bearer KEY_ID:KEY_SECRET

Dashboard

https://app.onesend.eu

SMTP-Host

smtp.onesend.eu

SMTP-Port

587 (STARTTLS)

SMTP-Benutzername

KEY_ID

SMTP-Passwort

KEY_SECRET

Authentifizierung

Beide Methoden verwenden dieselben Zugangsdaten: einen API-Schlüssel, der aus einer key ID (öffentlich) und einem key secret besteht. Schlüssel erstellen Sie im Dashboard unter app.onesend.eu.

Die REST-Authentifizierung nutzt ein Bearer-Token aus key ID und key secret, verbunden durch einen Doppelpunkt:

Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET

Bei SMTP dient die key ID als Benutzername und das key secret als Passwort. Es gibt keine separaten SMTP-Zugangsdaten. Der API-Schlüssel ist die Berechtigung für REST und SMTP gleichermaßen.

Sende-Domain bestätigen

Sie können nur von einer Adresse einer Domain senden, die Sie hinzugefügt und bestätigt haben. Das ist auch während der Testphase erforderlich, um die gemeinsame IP-Reputation zu schützen. Die Bestätigung erfolgt einmalig im Dashboard.

Wenn Sie eine Domain hinzufügen, erzeugt onesend einen DKIM-Schlüssel und gibt Ihnen vier TXT-Einträge, die Sie bei Ihrem DNS-Anbieter veröffentlichen:

ZweckHostWert (Beispiel)
DKIMonesend._domainkey.yourdomain.comv=DKIM1; k=rsa; p=MIIB...
SPFyourdomain.comv=spf1 include:onesend.eu ~all
DMARC_dmarc.yourdomain.comv=DMARC1; p=none; rua=mailto:dmarc@onesend.eu
Inhaberschaft_onesend.yourdomain.comonesend-verify=YOUR_TOKEN

Über DKIM wird die Bestätigung gesteuert. SPF und DMARC werden dringend empfohlen, die Domain wird jedoch allein über DKIM bestätigt. Der DKIM-Selector lautet onesend. Falls Sie bereits einen SPF-Eintrag haben, ergänzen Sie include:onesend.eu in Ihrem bestehenden Eintrag, statt einen zweiten anzulegen, denn eine Domain darf nur einen SPF-Eintrag haben. DNS-Änderungen brauchen einige Minuten bis wenige Stunden, bis sie wirksam sind.

Senden über die REST-API

POST https://api.onesend.eu/v1/email/send
Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET
Content-Type: application/json

Anfrage-Body:

{
  "from": "hello@yourdomain.com",
  "to": ["recipient@example.com"],
  "cc": ["optional@example.com"],
  "bcc": ["optional@example.com"],
  "reply_to": "reply@yourdomain.com",
  "subject": "Hello from onesend",
  "html": "<h1>It works</h1>",
  "text": "It works",
  "headers": { "X-Custom": "value" },
  "tags": { "campaign": "welcome" }
}

Pflichtfelder sind from, to, subject und mindestens eines von html oder text. Die from-Adresse muss auf einer bestätigten Domain liegen. Die Felder cc, bcc, reply_to, text, headers und tags sind optional.

Bei Erfolg lautet die Antwort 202 Accepted und die Nachricht wird zur Zustellung eingereiht:

{ "message_id": "...", "status": "queued" }

Steht der Empfänger auf Ihrer Sperrliste, liefert die Anfrage weiterhin 200 (kein Fehler), der Versand wird übersprungen und nicht abgerechnet:

{ "message_id": "...", "status": "suppressed", "reason": "Recipient on suppression list (bounce)" }

Senden über SMTP

Richten Sie Ihren vorhandenen SMTP-Mailer auf onesend aus. Außer Host und Zugangsdaten sind keine Codeänderungen nötig.

Host:     smtp.onesend.eu
Port:     587
Security: STARTTLS (required)
Username: YOUR_KEY_ID
Password: YOUR_KEY_SECRET

Es gelten dieselben Regeln wie bei REST: Die From-Adresse muss auf einer bestätigten Domain liegen, und gesperrte Empfänger werden übersprungen und nicht abgerechnet.

Codebeispiele

curl (REST)

curl -X POST https://api.onesend.eu/v1/email/send \
  -H "Authorization: Bearer $ONESEND_KEY_ID:$ONESEND_KEY_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@yourdomain.com",
    "to": ["recipient@example.com"],
    "subject": "Hello from onesend",
    "html": "<h1>It works</h1>",
    "text": "It works"
  }'

Node.js (REST, fetch)

const res = await fetch("https://api.onesend.eu/v1/email/send", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.ONESEND_KEY_ID}:${process.env.ONESEND_KEY_SECRET}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "hello@yourdomain.com",
    to: ["recipient@example.com"],
    subject: "Hello from onesend",
    html: "<h1>It works</h1>",
  }),
});
const data = await res.json();
console.log(res.status, data);

Node.js (SMTP, nodemailer)

import nodemailer from "nodemailer";

const transport = nodemailer.createTransport({
  host: "smtp.onesend.eu",
  port: 587,
  requireTLS: true,
  auth: {
    user: process.env.ONESEND_KEY_ID,
    pass: process.env.ONESEND_KEY_SECRET,
  },
});

await transport.sendMail({
  from: "hello@yourdomain.com",
  to: "recipient@example.com",
  subject: "Hello from onesend",
  html: "<h1>It works</h1>",
});

Python (REST, requests)

import os, requests

r = requests.post(
    "https://api.onesend.eu/v1/email/send",
    headers={
        "Authorization": f"Bearer {os.environ['ONESEND_KEY_ID']}:{os.environ['ONESEND_KEY_SECRET']}"
    },
    json={
        "from": "hello@yourdomain.com",
        "to": ["recipient@example.com"],
        "subject": "Hello from onesend",
        "html": "<h1>It works</h1>",
    },
)
print(r.status_code, r.json())

Python (SMTP, smtplib)

import os, smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = "hello@yourdomain.com"
msg["To"] = "recipient@example.com"
msg["Subject"] = "Hello from onesend"
msg.set_content("It works")
msg.add_alternative("<h1>It works</h1>", subtype="html")

with smtplib.SMTP("smtp.onesend.eu", 587) as s:
    s.starttls()
    s.login(os.environ["ONESEND_KEY_ID"], os.environ["ONESEND_KEY_SECRET"])
    s.send_message(msg)

PHP (REST, curl)

$ch = curl_init("https://api.onesend.eu/v1/email/send");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer {$keyId}:{$keySecret}",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "from" => "hello@yourdomain.com",
    "to" => ["recipient@example.com"],
    "subject" => "Hello from onesend",
    "html" => "<h1>It works</h1>",
  ]),
]);
$response = curl_exec($ch);

Jede andere Sprache, jedes Framework und jedes Tool sendet über die obigen SMTP-Einstellungen, darunter Go net/smtp, Ruby, Java, Laravel, Rails, Django, WordPress und n8n.

Von einem anderen Anbieter migrieren

Die schnellste Migration ist SMTP: Host und Zugangsdaten ändern, alles andere bleibt gleich. Fügen Sie in jedem Fall zuerst Ihre Sende-Domain in onesend hinzu und bestätigen Sie sie, denn der Versand setzt eine bestätigte Domain voraus.

Amazon SES

Für SMTP ändern Sie den Host von email-smtp.REGION.amazonaws.com auf smtp.onesend.eu über Port 587 und verwenden Ihre onesend key ID und Ihr key secret statt der SES-SMTP-Zugangsdaten. Das ist direkt einsetzbar. Für REST nutzt SES mit SigV4 signierte Anfragen, daher hat die REST-API von onesend eine andere Form; wechseln Sie entweder zu POST /v1/email/send oder nutzen Sie SMTP für eine Migration ohne Codeänderungen. Sie können Ihre SES-Sperrliste exportieren und die CSV im Dashboard importieren.

SendGrid

Für SMTP nutzt SendGrid smtp.sendgrid.net mit dem Benutzernamen apikey. onesend nutzt smtp.onesend.eu, wobei der Benutzername Ihre key ID und das Passwort Ihr key secret ist. Für REST verwendet SendGrids /v3/mail/send eine andere JSON-Struktur; nutzen Sie stattdessen POST /v1/email/send von onesend.

Mailgun

Für SMTP ändern Sie den Host von smtp.mailgun.org auf smtp.onesend.eu und tauschen die Zugangsdaten. Für REST nutzt Mailgun formularcodierte Anfragen an /v3/DOMAIN/messages; nutzen Sie stattdessen das JSON-POST /v1/email/send von onesend.

Postmark

Für SMTP ändern Sie den Host von smtp.postmarkapp.com auf smtp.onesend.eu und tauschen die Zugangsdaten. Für REST nutzt Postmark einen X-Postmark-Server-Token-Header und einen anderen Body; nutzen Sie stattdessen POST /v1/email/send von onesend.

Zustellungs-Statuswerte

Eine Nachricht durchläuft diese Status:

  • queued angenommen und wartet auf den Versand durch den Worker.
  • sent an den empfangenden Mailserver übergeben.
  • bounced harter Bounce (dauerhaft). Die Adresse kommt auf Ihre Sperrliste.
  • soft_bounced vorübergehender Fehler, etwa ein volles Postfach. Wird erneut versucht, nicht gesperrt.
  • complained Empfänger hat die Nachricht als Spam markiert. Kommt auf Ihre Sperrliste.
  • suppressed Empfänger stand bereits auf Ihrer Sperrliste. Übersprungen, nicht abgerechnet.
  • invalid Adresse hat die Prüfung vor dem Versand nicht bestanden (falsche Syntax oder tote Domain).
  • blocked durch eine Richtlinienprüfung vor dem Versand blockiert.
  • failed interner Sendefehler.

Sperrliste

onesend führt pro Konto eine Sperrliste. Adressen landen automatisch darauf durch harte Bounces und Beschwerden, durch die Prüfung vor dem Versand, oder Sie fügen sie selbst hinzu. onesend erfasst sowohl den Grund (warum gesperrt) als auch die Quelle (wie sie dorthin kam) sowie den tatsächlichen Diagnosecode. Sie verwalten die Liste im Dashboard und können sie als CSV importieren oder exportieren.

Tarife und Abrechnung

Zum Senden sind eine bestätigte Domain und ein Tarif nötig. Die Testphase umfasst 100 E-Mails ohne Zeitlimit. Die kostenpflichtigen Tarife sind Starter und Growth, monatlich über Mollie (ein EU-Zahlungsanbieter) abgerechnet, mit korrekter MwSt. für Kunden innerhalb und außerhalb der EU, einschließlich Reverse Charge für geprüfte EU-Geschäfts-USt-IdNr. Mehrverbrauch wird abgerechnet, nicht blockiert, und gesperrte Sendungen werden nie gezählt. Aktuelle Preise und enthaltene Mengen finden Sie auf der Preisseite.

Souveränität und Compliance

  • Betreibergesellschaft: WOCOO Management and Consulting GmbH, Wien, Österreich.
  • Infrastruktur: Hetzner, Falkenstein, Deutschland. Keine US-Unterauftragsverarbeiter im Sendepfad.
  • Auf DSGVO ausgelegt: Empfängerdaten liegen in einem Identitäts-Tresor, getrennt von den Sendeprotokollen, und jedes Konto legt seine eigene Aufbewahrungsrichtlinie fest. Sperrlisten-Daten und aggregierte Statistiken bleiben erhalten.
  • Zustellbarkeit: SPF, DKIM mit 2048-Bit-Schlüsseln pro Domain und DMARC pro Sende-Domain. Dedizierte Sende-IPs auf Anfrage.

Bauen Sie eine Integration mit einem KI-Assistenten? Eine Klartextfassung dieser Referenz liegt unter /llms-full.txt