Download the PHP package cboxdk/laravel-postal without Composer
On this page you can find all versions of the php package cboxdk/laravel-postal. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download cboxdk/laravel-postal
More information about cboxdk/laravel-postal
Files in cboxdk/laravel-postal
Package laravel-postal
Short Description Postal mail server integration for Laravel — a typed, multi-server send transport plus a verified, event-driven webhook observability spine (delivery, bounce, open, click, DNS).
License MIT
Homepage https://github.com/cboxdk/laravel-postal
Informations about the package laravel-postal
Cbox Postal
Postal mail server integration for Laravel — a typed, multi-server send transport plus a verified, event-driven webhook observability spine (delivery, bounce, open, click, DNS).
Postal is a self-hosted mail server with an HTTP send API and signed webhooks. This package treats it as a live, typed delivery bus rather than a fire-and-forget mail driver:
- Send through a fully-typed client (
Postal::send(...)) or transparently viaMAIL_MAILER=postal, with retries, typed exceptions and correct handling of Postal's HTTP-200-with-error envelopes. Three connection types per server:api(structured JSON),smtp-api(raw RFC 2822 over the HTTP API) andsmtp(classic SMTP submission). - Observe through verified webhooks: RSA signatures are checked over the raw request body, deliveries are deduplicated on Postal's webhook uuid, an idempotent per-message status row is maintained, and one typed Laravel event fires per Postal event type.
- Receive inbound email: Postal routes deliver to a signed HTTP
endpoint that becomes a typed
PostalInboundMessageevent — bodies, headers, attachments and raw source included. - Multiple servers are first-class: one config entry per Postal mail
server, addressed by name — or provisioned dynamically from a database
via the
ServerRegistrycontract /Postal::connect().
Installation
Configure at least one server in .env:
Then verify everything — servers, keys, routes, tables, connectivity:
Install with your AI assistant
Working with Claude Code, Cursor or similar? Paste the setup prompt from
docs/getting-started/llm-install.md
into your assistant — it performs the whole installation, pauses for the
two Postal-UI steps, and finishes with a green postal:doctor run.
Sending
As a mail transport — add a mailer and point MAIL_MAILER at it:
Or through the typed API:
Or per server: Postal::server('cbox-billing')->send(...).
Observing
Point each Postal mail server's webhook at your app (Postal admin → Webhooks; the URL suffix names the server the delivery belongs to):
Fetch the signing key and set it in .env:
Then subscribe to the typed events:
One event class exists per Postal event type: PostalMessageSent,
PostalMessageDelayed, PostalMessageDeliveryFailed, PostalMessageHeld,
PostalMessageBounced, PostalMessageLinkClicked, PostalMessageLoaded
(= opened), PostalDomainDnsError, PostalSendLimitApproaching,
PostalSendLimitExceeded.
The store keeps one idempotent row per message in postal_messages
(latest status, opens/clicks counters, owning model) plus a deduplicated
event log in postal_message_events. Watch it live:
Receiving
Point a Postal route's HTTP endpoint at
https://your-app.example/postal/inbound/{server} and listen:
Dynamic servers
Testing your app
Console DX
| Command | Purpose |
|---|---|
postal:install |
Publish config + setup checklist |
postal:doctor |
Full diagnosis — CI-friendly exit codes |
postal:ping |
Connectivity + credential check per server |
postal:tail |
Live-tail incoming webhook/inbound events |
postal:message |
Inspect one message + its delivery attempts |
postal:webhook-key |
Fetch the webhook signing key as PEM |
Documentation
Full documentation lives in docs/: quickstart, multi-server configuration, connection types (api / smtp-api / smtp), the webhook spine, inbound mail, the event catalog, notifications, broadcasting, dynamic server provisioning, extension points and the security model.
Requirements
PHP 8.4+, Laravel 12 or 13. Tested against Postal 3.x.
License
MIT — see LICENSE.md.
All versions of laravel-postal with dependencies
ext-openssl Version *
illuminate/console Version ^12.0 || ^13.0
illuminate/contracts Version ^12.0 || ^13.0
illuminate/database Version ^12.0 || ^13.0
illuminate/http Version ^12.0 || ^13.0
illuminate/mail Version ^12.0 || ^13.0
illuminate/queue Version ^12.0 || ^13.0
illuminate/support Version ^12.0 || ^13.0
symfony/mailer Version ^7.4 || ^8.0