Mailable classes and its Mail::to(...)->send(...) calls. The transport hands them to Lekalao’s transactional API, which sends them with the provider you chose and keeps them in its log: deliveries, bounces, opens, clicks.
Install
Thelekalao/laravel-transport package ships with Lekalao, in packages/laravel-transport. Laravel 11, 12 or 13, PHP 8.2 or later.
From the application that sends, declare the repository and install it:
composer.json
Configure
Create a Read and write token in Lekalao, then inconfig/mail.php:
config/mail.php
.env
endpoint is the API’s versioned root: https://api.lekalao.com/v1 on Lekalao’s service, https://your-domain/api/v1 on an installation of your own.
The key is called
endpoint, not url: Laravel reads a mailer’s url key
as an SMTP connection string.MAIL_MAILER and choose case by case:
What goes through
The e-mail’s identifier in Lekalao becomes the
Message-ID of the message sent, which is how you find it again in the log.
Choosing the sending provider
Add theX-Lekalao-Mailer header with the name of a provider configured in Lekalao:
Errors
A refusal from Lekalao (sender not allowed, token revoked, every recipient on the suppression list, allowance used up) comes back as aSymfony\Component\Mailer\Exception\TransportException carrying the HTTP code and the reason. Send your e-mails on a queue (ShouldQueue) so Laravel retries on its own.
Once Lekalao has taken the e-mail, send() returns: the provider gets it a moment later, from Lekalao’s own queue, with new attempts for six hours if it fails. What became of it is in the transactional log, and on the API by the message’s id. See The answer.
The timeout is 15 seconds.