API

Invia email via REST o SMTP.

onesend offre un'API REST e un relay SMTP pronto all'uso per le email transazionali. Sovrano nell'UE, conforme al GDPR, ospitato in Germania. Passa da Amazon SES, SendGrid, Mailgun o Postmark cambiando solo host e chiave.

Base REST

https://api.onesend.eu

Endpoint di invio

POST /v1/email/send

Auth REST

Authorization: Bearer KEY_ID:KEY_SECRET

Dashboard

https://app.onesend.eu

Host SMTP

smtp.onesend.eu

Porta SMTP

587 (STARTTLS)

Nome utente SMTP

KEY_ID

Password SMTP

KEY_SECRET

Autenticazione

Entrambi i metodi usano la stessa credenziale: una chiave API, composta da un key ID (pubblico) e un key secret. Crea le chiavi nella dashboard su app.onesend.eu.

L'autenticazione REST usa un token Bearer formato dal key ID e dal key secret uniti da due punti:

Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET

Per SMTP, il key ID è il nome utente e il key secret è la password. Non ci sono credenziali SMTP separate da generare. La chiave API è la credenziale sia per REST sia per SMTP.

Verifica il tuo dominio di invio

Puoi inviare solo da un indirizzo di un dominio che hai aggiunto e verificato. È richiesto anche durante la prova, per proteggere la reputazione dell'IP condiviso. La verifica si fa una sola volta, nella dashboard.

Quando aggiungi un dominio, onesend genera una chiave DKIM e ti fornisce quattro record TXT da pubblicare presso il tuo provider DNS:

ScopoHostValore (esempio)
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
Proprietà_onesend.yourdomain.comonesend-verify=YOUR_TOKEN

È DKIM a determinare la verifica. SPF e DMARC sono fortemente consigliati, ma il dominio viene verificato solo tramite DKIM. Il selettore DKIM è onesend. Se hai già un record SPF, aggiungi include:onesend.eu al record esistente invece di crearne un secondo, poiché un dominio può avere un solo record SPF. Le modifiche DNS impiegano da pochi minuti a poche ore per propagarsi.

Inviare con l'API REST

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

Corpo della richiesta:

{
  "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" }
}

I campi obbligatori sono from, to, subject e almeno uno tra html o text. L'indirizzo from deve essere su un dominio verificato. I campi cc, bcc, reply_to, text, headers e tags sono facoltativi.

In caso di successo la risposta è 202 Accepted e il messaggio viene messo in coda per la consegna:

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

Se il destinatario è nella tua lista di soppressione, la richiesta restituisce comunque 200 (non un errore), l'invio viene saltato e non viene fatturato:

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

Inviare via SMTP

Punta il tuo mailer SMTP esistente a onesend. Nessuna modifica al codice oltre a host e credenziali.

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

Valgono le stesse regole di REST: l'indirizzo From deve essere su un dominio verificato e i destinatari soppressi vengono saltati e non fatturati.

Esempi di codice

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);

Qualsiasi altro linguaggio, framework o strumento invia tramite le impostazioni SMTP sopra, inclusi Go net/smtp, Ruby, Java, Laravel, Rails, Django, WordPress e n8n.

Migrare da un altro provider

La migrazione più rapida è SMTP: cambia host e credenziali e lascia tutto il resto invariato. In ogni caso, aggiungi e verifica prima il tuo dominio di invio in onesend, perché l'invio richiede un dominio verificato.

Amazon SES

Per SMTP, cambia l'host da email-smtp.REGION.amazonaws.com a smtp.onesend.eu sulla porta 587 e usa il tuo key ID e key secret di onesend al posto delle credenziali SMTP di SES. È pronto all'uso. Per REST, SES usa richieste firmate con SigV4, quindi l'API REST di onesend ha una forma diversa; passa a POST /v1/email/send oppure usa SMTP per una migrazione senza modifiche al codice. Puoi esportare la tua lista di soppressione di SES e importare il CSV nella dashboard.

SendGrid

Per SMTP, SendGrid usa smtp.sendgrid.net con il nome utente apikey. onesend usa smtp.onesend.eu, con il nome utente impostato sul tuo key ID e la password sul tuo key secret. Per REST, il /v3/mail/send di SendGrid usa una struttura JSON diversa; usa invece POST /v1/email/send di onesend.

Mailgun

Per SMTP, cambia l'host da smtp.mailgun.org a smtp.onesend.eu e sostituisci le credenziali. Per REST, Mailgun usa richieste con codifica form verso /v3/DOMAIN/messages; usa invece il JSON POST /v1/email/send di onesend.

Postmark

Per SMTP, cambia l'host da smtp.postmarkapp.com a smtp.onesend.eu e sostituisci le credenziali. Per REST, Postmark usa un header X-Postmark-Server-Token e un corpo diverso; usa invece POST /v1/email/send di onesend.

Valori di stato della consegna

Un messaggio attraversa questi stati:

  • queued accettato e in attesa dell'invio da parte del worker.
  • sent consegnato al server di posta ricevente.
  • bounced bounce definitivo (permanente). L'indirizzo viene aggiunto alla tua lista di soppressione.
  • soft_bounced errore temporaneo, ad esempio una casella piena. Riprovato, non soppresso.
  • complained il destinatario l'ha contrassegnato come spam. Aggiunto alla tua lista di soppressione.
  • suppressed il destinatario era già nella tua lista di soppressione. Saltato, non fatturato.
  • invalid l'indirizzo non ha superato la validazione prima dell'invio (sintassi errata o dominio inesistente).
  • blocked bloccato da un controllo delle policy prima dell'invio.
  • failed errore di invio interno.

Lista di soppressione

onesend mantiene una lista di soppressione per ogni account. Gli indirizzi ci finiscono automaticamente per bounce definitivi e reclami, per la validazione prima dell'invio, oppure li aggiungi tu. onesend registra sia il motivo (perché è soppresso) sia l'origine (come ci è arrivato), oltre al codice diagnostico reale. Gestisci la lista nella dashboard e puoi importarla o esportarla come CSV.

Piani e fatturazione

Per inviare servono un dominio verificato e un piano. La prova copre 100 email senza limiti di tempo. I piani a pagamento sono Starter e Growth, fatturati mensilmente tramite Mollie (un fornitore di pagamenti dell'UE), con IVA applicata correttamente per clienti UE ed extra-UE, inclusa l'inversione contabile per partite IVA aziendali UE verificate. Il consumo eccedente viene fatturato, non bloccato, e gli invii soppressi non vengono mai conteggiati. Per prezzi attuali e volumi inclusi, vedi la pagina dei prezzi.

Sovranità e conformità

  • Società che gestisce il servizio: WOCOO Management and Consulting GmbH, Vienna, Austria.
  • Infrastruttura: Hetzner, Falkenstein, Germania. Nessun subincaricato statunitense nel percorso di invio.
  • Progettato per il GDPR: i dati dei destinatari si trovano in un caveau di identità separato dai log di invio, e ogni account imposta la propria policy di conservazione. I dati della lista di soppressione e le statistiche aggregate vengono conservati.
  • Recapitabilità: SPF, DKIM con chiavi a 2048 bit per dominio e DMARC per dominio di invio. IP di invio dedicate su richiesta.

Stai realizzando un'integrazione con un assistente IA? Una copia in testo semplice di questo riferimento si trova su /llms-full.txt