Authentification
Les deux méthodes utilisent le même identifiant : une clé API, composée d'un key ID (public) et d'un key secret. Créez vos clés dans le tableau de bord sur app.onesend.eu.
L'authentification REST utilise un jeton Bearer formé du key ID et du key secret reliés par deux-points :
Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET
Pour SMTP, le key ID sert de nom d'utilisateur et le key secret de mot de passe. Il n'y a pas d'identifiants SMTP distincts à générer. La clé API sert d'identifiant à la fois pour REST et pour SMTP.
Vérifier votre domaine d'envoi
Vous ne pouvez envoyer qu'à partir d'une adresse d'un domaine que vous avez ajouté et vérifié. C'est requis même pendant l'essai, afin de protéger la réputation de l'IP partagée. La vérification se fait une seule fois, dans le tableau de bord.
Lorsque vous ajoutez un domaine, onesend génère une clé DKIM et vous fournit quatre enregistrements TXT à publier chez votre fournisseur DNS :
| Objet | Hôte | Valeur (exemple) |
|---|---|---|
| DKIM | onesend._domainkey.yourdomain.com | v=DKIM1; k=rsa; p=MIIB... |
| SPF | yourdomain.com | v=spf1 include:onesend.eu ~all |
| DMARC | _dmarc.yourdomain.com | v=DMARC1; p=none; rua=mailto:dmarc@onesend.eu |
| Propriété | _onesend.yourdomain.com | onesend-verify=YOUR_TOKEN |
C'est DKIM qui conditionne la vérification. SPF et DMARC sont fortement recommandés, mais le domaine est vérifié sur la seule base de DKIM. Le sélecteur DKIM est onesend. Si vous avez déjà un enregistrement SPF, ajoutez include:onesend.eu à votre enregistrement existant plutôt que d'en créer un second, car un domaine ne peut avoir qu'un seul enregistrement SPF. Les changements DNS prennent de quelques minutes à quelques heures pour se propager.
Envoyer avec l'API REST
POST https://api.onesend.eu/v1/email/send
Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET
Content-Type: application/json
Corps de la requête :
{
"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" }
}
Les champs obligatoires sont from, to, subject et au moins l'un de html ou text. L'adresse from doit être sur un domaine vérifié. Les champs cc, bcc, reply_to, text, headers et tags sont facultatifs.
En cas de succès, la réponse est 202 Accepted et le message est mis en file pour livraison :
{ "message_id": "...", "status": "queued" }
Si le destinataire figure sur votre liste de suppression, la requête renvoie tout de même 200 (pas une erreur), l'envoi est ignoré et n'est pas facturé :
{ "message_id": "...", "status": "suppressed", "reason": "Recipient on suppression list (bounce)" }
Envoyer via SMTP
Pointez votre client SMTP existant vers onesend. Aucune modification de code au-delà de l'hôte et des identifiants.
Host: smtp.onesend.eu
Port: 587
Security: STARTTLS (required)
Username: YOUR_KEY_ID
Password: YOUR_KEY_SECRET
Les mêmes règles qu'en REST s'appliquent : l'adresse From doit être sur un domaine vérifié, et les destinataires supprimés sont ignorés et non facturés.
Exemples de code
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);
Tout autre langage, framework ou outil envoie via les paramètres SMTP ci-dessus, y compris Go net/smtp, Ruby, Java, Laravel, Rails, Django, WordPress et n8n.
Migrer depuis un autre fournisseur
La migration la plus rapide est SMTP : changez l'hôte et les identifiants, ne touchez à rien d'autre. Dans tous les cas, ajoutez et vérifiez d'abord votre domaine d'envoi dans onesend, car l'envoi exige un domaine vérifié.
Amazon SES
Pour SMTP, remplacez l'hôte email-smtp.REGION.amazonaws.com par smtp.onesend.eu sur le port 587, et utilisez votre key ID et votre key secret onesend à la place des identifiants SMTP de SES. C'est prêt à l'emploi. Pour REST, SES utilise des requêtes signées SigV4, l'API REST de onesend a donc une forme différente ; passez à POST /v1/email/send ou utilisez SMTP pour une migration sans modification de code. Vous pouvez exporter votre liste de suppression SES et importer le CSV dans le tableau de bord.
SendGrid
Pour SMTP, SendGrid utilise smtp.sendgrid.net avec le nom d'utilisateur apikey. onesend utilise smtp.onesend.eu, avec le nom d'utilisateur défini sur votre key ID et le mot de passe sur votre key secret. Pour REST, le /v3/mail/send de SendGrid utilise une structure JSON différente ; utilisez plutôt POST /v1/email/send de onesend.
Mailgun
Pour SMTP, remplacez l'hôte smtp.mailgun.org par smtp.onesend.eu et changez les identifiants. Pour REST, Mailgun utilise des requêtes encodées en formulaire vers /v3/DOMAIN/messages ; utilisez plutôt le JSON POST /v1/email/send de onesend.
Postmark
Pour SMTP, remplacez l'hôte smtp.postmarkapp.com par smtp.onesend.eu et changez les identifiants. Pour REST, Postmark utilise un en-tête X-Postmark-Server-Token et un corps différent ; utilisez plutôt POST /v1/email/send de onesend.
Valeurs de statut de livraison
Un message passe par ces statuts :
queuedaccepté et en attente d'envoi par le worker.sentremis au serveur de messagerie destinataire.bouncedrejet définitif (permanent). L'adresse est ajoutée à votre liste de suppression.soft_bouncedéchec temporaire, par exemple une boîte pleine. Réessayé, non supprimé.complainedle destinataire l'a marqué comme spam. Ajouté à votre liste de suppression.suppressedle destinataire figurait déjà sur votre liste de suppression. Ignoré, non facturé.invalidl'adresse a échoué à la validation avant l'envoi (syntaxe incorrecte ou domaine mort).blockedbloqué par un contrôle de règles avant l'envoi.failedéchec d'envoi interne.
Liste de suppression
onesend tient une liste de suppression par compte. Les adresses y arrivent automatiquement à la suite de rejets définitifs et de plaintes, de la validation avant envoi, ou vous les ajoutez vous-même. onesend enregistre à la fois la raison (pourquoi elle est supprimée) et la source (comment elle est arrivée), ainsi que le code de diagnostic réel. Vous gérez la liste dans le tableau de bord et pouvez l'importer ou l'exporter au format CSV.
Tarifs et facturation
L'envoi nécessite un domaine vérifié et un forfait. L'essai couvre 100 e-mails sans limite de durée. Les forfaits payants sont Starter et Growth, facturés mensuellement via Mollie (un prestataire de paiement européen), avec la TVA appliquée correctement pour les clients de l'UE et hors UE, y compris l'autoliquidation pour les numéros de TVA d'entreprise de l'UE validés. Le dépassement est facturé, pas bloqué, et les envois supprimés ne sont jamais comptés. Pour les prix actuels et les volumes inclus, voir la page des tarifs.
Souveraineté et conformité
- Société exploitante : WOCOO Management and Consulting GmbH, Vienne, Autriche.
- Infrastructure : Hetzner, Falkenstein, Allemagne. Aucun sous-traitant américain dans le chemin d'envoi.
- Conçu pour le RGPD : les données des destinataires se trouvent dans un coffre d'identité séparé des journaux d'envoi, et chaque compte définit sa propre politique de conservation. Les données de la liste de suppression et les statistiques agrégées sont conservées.
- Délivrabilité : SPF, DKIM avec des clés de 2048 bits par domaine, et DMARC par domaine d'envoi. IP d'envoi dédiées sur demande.
Vous construisez une intégration avec un assistant IA ? Une copie en texte brut de cette référence se trouve à /llms-full.txt