Download the PHP package duva-mail/laravel without Composer
On this page you can find all versions of the php package duva-mail/laravel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download duva-mail/laravel
More information about duva-mail/laravel
Files in duva-mail/laravel
Package laravel
Short Description Laravel mail transport for Duva, the transactional email API hosted in Canada.
License MIT
Homepage https://duva.ca
Informations about the package laravel
duva-mail/laravel
Laravel mail transport for Duva, the transactional email API hosted in Canada. Use Mail, Mailables and
Notifications as usual; the messages go out through Duva.
Requires PHP 8.2+ and Laravel 12 or 13 (Laravel 11 no longer receives security fixes). Built on duva-mail/duva.
Install
The package registers itself (Laravel package discovery). You also need a Duva API key and a verified domain (documentation).
Configure
.env:
config/mail.php, in mailers:
Optional keys: base_url (default https://api.duva.ca), timeout (seconds, default 10), max_retries (default 2). The From
address must belong to the configured domain.
Use it in a fail-over chain like any other transport:
What is sent
| Laravel / Symfony | Duva |
|---|---|
| From, To, Cc, Bcc, Reply-To | from, to, cc, bcc, reply_to (a Bcc only in the envelope is sent as Bcc) |
| HTML and text bodies | html, text |
Attachments, inline images (embed) |
attachments (inline ones keep their content_id) |
Mailable::tag() |
tags |
Mailable::metadata() |
metadata |
List-Unsubscribe, List-Unsubscribe-Post, List-Id, In-Reply-To, References, Auto-Submitted, Precedence, Importance, Feedback-ID, and X-* headers |
headers |
Notes:
- Other headers are not forwarded (Duva rejects them), nor are
X-Duva*,X-Kumo*,X-Tenant*andX-Campaign*. - A display name Duva refuses (it contains
@, quotes,<>, control characters or an encoded word=?…?=) is dropped; the address is kept. - The message ID Laravel reports is Duva's.
- Delivery is asynchronous: a successful
send()means Duva accepted the message, not that it was delivered. Use Duva's webhooks or events for the outcome. - A Duva error is thrown as
Symfony\Component\Mailer\Exception\TransportException(the originalDuva\Exceptions\*exception is itsgetPrevious()), so Laravel's fail-over and your owncatchblocks behave as with any transport.
Idempotency
A retried queue job renders a new message, so it would be sent twice. Set a stable key for it (an order ID, for example):
The header is read by the transport and never sent. Duva ignores a second message with the same key.
Testing your application
Use Laravel's Mail::fake() as usual. To exercise the transport itself without a network, bind a fake transport of the
client library:
License
MIT.
All versions of laravel with dependencies
duva-mail/duva Version ^0.2
illuminate/mail Version ^12.0 || ^13.0
illuminate/support Version ^12.0 || ^13.0
symfony/mailer Version ^7.0 || ^8.0
symfony/mime Version ^7.0 || ^8.0