Skip to content

Artisan commands

Artisan commands

Command What it does
postal:install Publishes the config (add --migrations to copy migrations too) and prints the setup checklist.
postal:doctor Diagnoses the whole setup: server definitions, signing key (PEM validity), routes, store tables, mailer wiring and live connectivity per server. --no-ping skips the network checks. Non-zero exit on failures — CI-friendly.
postal:ping {server?} Real authenticated round-trip per server (API types) or an SMTP handshake (smtp type). Prints a table; non-zero exit when any server fails.
postal:tail {server?} {--interval=2} {--once} Live-tails the webhook/inbound event log from the store — proves the spine with just a queue worker and a database.
postal:message {server} {id} Fetches and pretty-prints one message with its delivery attempts.
postal:webhook-key {server?} Fetches the install's webhook signing key from /.well-known/jwks.json and prints it as paste-ready PEM.

Typical flows

Fresh install:

php artisan postal:install
php artisan migrate
php artisan postal:ping
php artisan postal:webhook-key   # → POSTAL_WEBHOOK_PUBLIC_KEY
php artisan postal:doctor

Debugging "where did my email go":

php artisan postal:tail &        # watch events arrive
php artisan postal:message cbox-billing 4200

CI / deployment gate:

php artisan postal:doctor --no-ping   # config-only, no network
php artisan postal:doctor             # full, including connectivity