Aller au contenu

CLI

Fenêtre de terminal
npm install -g spacepost # or run without installing: npx spacepost <command>, bunx spacepost <command>
spacepost login
spacepost send --from "Acme <hi@acme.com>" --to you@example.com --subject Hello --text "It works"

Lancez spacepost --help pour toutes les commandes et spacepost <command> --help pour les options d’une commande.

spacepost login demande votre clé API, la vérifie auprès de l’API et la stocke dans ~/.config/spacepost/config.json (mode 0600, respecte XDG_CONFIG_HOME). L’entrée par tube fonctionne aussi : echo $KEY | spacepost login. En CI ou dans des scripts, définissez plutôt la variable d’environnement :

Fenêtre de terminal
export SPACEPOST_API_KEY="sp_live_YOUR_API_KEY"
spacepost whoami

La clé provient de --api-key, puis de SPACEPOST_API_KEY, puis de la connexion stockée. L’URL de base de l’API provient de --base-url, puis de SPACEPOST_BASE_URL, puis de la connexion stockée, puis de https://api.spacepost.dev.

Commande Ce qu’elle fait
login, logout, whoami Gérer les identifiants. whoami affiche la clé masquée, l’URL de base et le nombre de domaines
send Envoyer un e-mail
emails list, emails get <id>, emails cancel <id> Inspecter les e-mails, annuler les e-mails planifiés
domains add <name>, list, get <id|name>, verify <id|name>, doctor <id|name>, rm <id|name> Gérer les domaines par id ou par nom
keys create, keys list, keys rm <id> Clés API
webhooks list, webhooks create, webhooks rm <id> Endpoints de webhook
tenants list, create, get <ref>, pause <ref>, unpause <ref>, rm <ref> Tenants du mode plateforme
open Afficher (et ouvrir) l’URL du tableau de bord

Global flags: --api-key, --base-url, --json, -y/--yes (skip confirmations), -h/--help, -v/--version. Colors honor NO_COLOR.

Fenêtre de terminal
spacepost send \
--from "Acme <hello@acme.com>" \
--to user@example.com \
--subject "Hello from the CLI" \
--html "<p>It works.</p>"
spacepost send --from hello@acme.com --to a@example.com --to b@example.com --subject "Newsletter" --html-file ./email.html
spacepost send --from hello@acme.com --to user@example.com --subject "Reminder" --text "Call at 3" --schedule "in 1 hour"
echo "body from stdin" | spacepost send --from hello@acme.com --to user@example.com --subject Hi --text -
Option Description
--from Expéditeur sur un domaine vérifié (obligatoire)
--to Destinataire (obligatoire ; répétez l’option pour en indiquer plusieurs)
--subject Objet (obligatoire)
--text, --html, --html-file Corps : texte brut (- lit stdin), HTML en ligne, ou un fichier HTML. Au moins un est requis ; --html et --html-file ne peuvent pas être combinés
--cc, --bcc, --reply-to Répétable
--tag name=value Tag répétable
--schedule "in 1 hour" Heure ISO 8601 ou langage naturel
--attach <file> Pièce jointe répétable
--tenant <id|external-id> Envoyer au nom d’un tenant

En cas de succès, elle affiche ✓ Queued: <id> (avec --json, la réponse de l’API { "id": "..." }).

Fenêtre de terminal
spacepost emails list [--limit 20] [--after <id>] [--before <id>]
spacepost emails get <id>
spacepost emails cancel <id> # scheduled emails only
Fenêtre de terminal
spacepost domains add acme.com [--region eu-central-1] [--tenant cust_123]
spacepost domains list [--limit 20]
spacepost domains get acme.com # id or name, includes DNS records
spacepost domains verify acme.com
spacepost domains rm acme.com [--yes]

domains add affiche les enregistrements DNS à créer. --tenant rend le domaine propriété d’un tenant (voir Mode plateforme).

spacepost domains doctor <id|name> recherche chaque enregistrement DNS attendu (CNAME, TXT, MX) dans le DNS public, le compare à ce que SpacePost attend et affiche ce qui manque ou est incorrect, avec une solution pour chacun. Il détecte le nom de domaine ajouté deux fois par un fournisseur DNS, plusieurs enregistrements SPF, une mauvaise priorité MX et le proxy Cloudflare.

$ spacepost domains doctor acme.com
acme.com API status: pending
RECORD TYPE HOST RESULT
✓ DKIM CNAME abc._domainkey.acme.com matches
✗ SPF MX send.acme.com not found
✗ SPF TXT send.acme.com found v=spf1 include:_spf.google.com ~all
! DMARC TXT _dmarc.acme.com not found (recommended)
How to fix
✗ MX send.acme.com
Add a MX record: name "send", value "feedback-smtp.eu-central-1.amazonses.com", priority 10.
✗ TXT send.acme.com
Your SPF record lacks the SpacePost include. ...

Utilisez --dns-server 1.1.1.1 pour contourner un cache de résolveur local périmé. Le code de sortie est 1 lorsqu’un enregistrement requis est manquant ou incorrect, ce qui permet de l’utiliser comme contrôle en CI.

Fenêtre de terminal
spacepost keys create --name worker-prod --permission sending_access --domain <domain-id>
spacepost keys list
spacepost keys rm <id> [--yes]
spacepost webhooks list
spacepost webhooks create --endpoint https://acme.com/webhooks/spacepost --event email.delivered --event email.bounced
spacepost webhooks rm <id> [--yes]

keys create affiche le jeton une seule fois. webhooks create affiche le signing_secret. --event est répétable (il n’existe pas de forme séparée par des virgules), et --domain exige --permission sending_access.

Fenêtre de terminal
spacepost tenants create --name "Acme Inc" --external-id cust_123 --daily-limit 500
spacepost tenants list [--limit 20]
spacepost tenants get cust_123 # <ref> is our id or your external id
spacepost tenants pause cust_123 --reason "Investigating spam reports"
spacepost tenants unpause cust_123 # 403 for reputation pauses unless your team is trusted
spacepost tenants rm cust_123 [--yes] # 422 while the tenant still has domains

Voir Mode plateforme (tenants) pour ce que les tenants isolent et comment s’articulent domaines et webhooks.

Fenêtre de terminal
spacepost emails list --json | jq -r '.data[] | select(.last_event=="bounced") | .to[]'
id=$(spacepost send --from hello@acme.com --to delivered@test.spacepost.dev --subject Test --text hi --json | jq -r .id)
spacepost emails get "$id" --json | jq .last_event

Les commandes destructrices (domains rm, keys rm, webhooks rm, tenants rm) demandent une confirmation ; dans les scripts et avec --json, passez --yes.

Code Signification
0 Succès
1 Erreur d’API ou d’exécution (aussi domains doctor lorsqu’un enregistrement requis est manquant)
2 Erreur d’utilisation : commande ou option inconnue, option obligatoire manquante

Les erreurs vont sur stderr avec une indication lorsqu’il y en a une. Avec --json, elles sont affichées en JSON sur stderr : { "error": { "name", "message", "statusCode", "hint" } }.

Variable Rôle
SPACEPOST_API_KEY Clé API (remplace la connexion stockée)
SPACEPOST_BASE_URL URL de base alternative de l’API
SPACEPOST_APP_URL URL du tableau de bord affichée par spacepost open
XDG_CONFIG_HOME Emplacement de stockage de la connexion ($XDG_CONFIG_HOME/spacepost/config.json)
NO_COLOR Désactiver les couleurs