CLI postal
Envía correos electrónicos y eventos, actualiza contactos y revisa dominios desde la terminal, con salida JSON para scripts y agentes de IA.
#Instalar
La CLI postal viene en el paquete postal-so y requiere Node 18 o superior:
npm install --global postal-so
postal --version
# ou, sem instalar
npx postal-so --help
Sirve para probar una clave, enviar un correo de prueba, disparar un evento o revisar dominios sin escribir código, y para scripts y agentes de IA (con --json).
#Autenticación
postal login pide la clave (lo que escribes no aparece en pantalla), la comprueba con la API y la guarda en ~/.config/postal/config.json con permiso 0600 (solo tu usuario puede leerla). Fuera de una terminal, lee la clave de la entrada estándar. postal whoami muestra la cuenta y la clave en uso, y postal logout borra la clave guardada.
postal login # pede a chave e guarda em ~/.config/postal/config.json
echo "$POSTAL_API_KEY" | postal login # sem terminal
postal whoami # plano, cotas e a chave em uso (mascarada)
postal logout
La variable de entorno POSTAL_API_KEY tiene prioridad sobre el archivo: en CI y en servidores, usa solo la variable. Una clave solo de envío basta para emails send, events send y emails get (solo de los correos que ella envió); los demás comandos requieren acceso total.
#Comandos
| Comando | Qué hace |
|---|---|
postal login, logout, whoami | Guarda, borra y muestra la clave en uso. |
postal emails send | Envía un correo electrónico con --html, --text o --template. |
postal emails get <id> | Muestra el estado de un correo electrónico. |
postal events send | Envía un evento que inicia automatizaciones. |
postal contacts upsert | Crea o actualiza un contacto por --external-id o --email. |
postal contacts get <contato> | Muestra un contacto por correo, ID o external_id:<id>. |
postal domains list | Lista los dominios y el estado de la verificación. |
postal domains verify <id> | Solicita la verificación del DNS de un dominio. |
postal --help lista los comandos y postal <comando> --help muestra las opciones y ejemplos de cada uno, en portugués.
#Enviar un correo electrónico
Los valores de --html y --text aceptan @arquivo para leer el contenido de un archivo. Repite --to, --cc y --bcc (o sepáralos con comas) para varias direcciones. Con --idempotency-key, repetir el comando no duplica el envío.
postal emails send \
--from "Minha empresa <[email protected]>" \
--to [email protected] \
--subject "Bem-vindo!" \
--html "<p>Que bom ter você por aqui.</p>"
postal emails send --from [email protected] --to [email protected] \
--subject "Seu relatório" --html @relatorio.html --text @relatorio.txt
# com um template publicado
postal emails send --to [email protected] --template boas-vindas --var NOME=Fulano
#Eventos y contactos
events send acepta --email o --external-id para indicar quién lo hizo, --props con los datos del evento y --contact-props para actualizar el contacto antes de las automatizaciones. contacts upsert busca por --external-id y después por --email; indica el correo para crear un contacto nuevo.
postal events send --email [email protected] --name signup --props '{"plan":"free"}'
postal contacts upsert --external-id user_42 --email [email protected] \
--first-name Fulano --props '{"plan":"pro"}'
postal domains list
#Salida para scripts y agentes
Añade --json para imprimir la respuesta de la API como JSON. En caso de error, el JSON {"error": {"statusCode", "name", "message"}} sale por stderr.
postal domains list --json | jq '.data[] | select(.status != "verified") | .name'
postal emails send --from [email protected] --to [email protected] \
--subject "Teste" --text "Funcionou" --json
# {"id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b"}
| Código de salida | Significado |
|---|---|
0 | Salió bien. |
1 | Error de la API (como validation_error) o de red. |
2 | Uso incorrecto: opción desconocida, valor ausente o JSON no válido. |
POSTAL_API_URL cambia la URL de la API (por defecto https://api.postal.so), útil para pruebas.