kinetis / mailer
Non-blocking mail sending for Kinetis — Symfony\Component\Mailer over any DSN-selected transport, with API-based transports going through kinetis/revolt-http-client instead of blocking.
Requires
- php: ^8.4
- kinetis/framework: ^1.6
- kinetis/revolt-http-client: ^1.0
- symfony/mailer: ^7.2|^8.0
Requires (Dev)
- infection/infection: ^0.34.2
- phpstan/phpstan: ^2.2
- phpunit/phpunit: ^11.0
- vimeo/psalm: ^6.16
README
kinetis/mailer
Mail sending for Kinetis, via Symfony\Component\Mailer
A single DSN selects the transport — SMTP, or any of Symfony's own
API-based bridges (Sendgrid, Mailgun, Postmark, SES, ...). API-based
transports run through kinetis/revolt-http-client
instead of blocking.
use Kinetis\Mailer\MailerFactory; use Symfony\Component\Mime\Email; $mailer = MailerFactory::fromConfig($config); $email = (new Email()) ->from('noreply@example.com') ->to('user@example.com') ->subject('Welcome!') ->text('Thanks for signing up.'); $mailer->send($email);
Configuration
MAILER_DSN=smtp://user:pass@smtp.example.com:587
| Key | Default | Purpose |
|---|---|---|
MAILER_DSN |
(required) | Symfony Mailer transport DSN. |
Scoped — MAILER_DSN + alerts → MAILER_ALERTS_DSN. Full reference:
docs.kinetis.dev/config.html.
Or an API-based transport instead — install the matching Symfony bridge
package too (symfony/sendgrid-mailer, symfony/mailgun-mailer, ...):
MAILER_DSN=sendgrid+api://KEY@default
SMTP is not non-blocking — it opens a raw socket directly, with no
Fiber-yield point. Send mail from a kinetis/queue job (constructor-inject
Symfony\Component\Mailer\MailerInterface in handle() — no extra code
needed in either package) if that matters for your app.
Installation
composer require kinetis/mailer
Requires PHP 8.4+, kinetis/framework, and kinetis/revolt-http-client.
Full documentation:
docs.kinetis.dev/mailer.html.
License
MIT — see LICENSE.