jegex / sendmail
Modern self-hosted email marketing core: campaigns, subscribers, tags, templates and multi-provider email sending for Laravel.
Fund package maintenance!
Requires
- php: ^8.4
- aws/aws-sdk-php-laravel: ^3.9
- doctrine/dbal: ^3.8|^4.0
- illuminate/container: ^11.0|^12.0|^13.0
- illuminate/contracts: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
- kriswallsmith/buzz: ^1.2
- mailgun/mailgun-php: ^4.2
- mailjet/mailjet-apiv3-php: ^1.6
- nyholm/psr7: ^1.8
- postal/postal: ^2.0|^3.0
- rap2hpoutre/fast-excel: ^5.4
- sendgrid/sendgrid: ^8.1
- spatie/laravel-package-tools: ^1.16
- wildbit/postmark-php: ^6.0|^7.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^11.0.0||^10.0.0||^9.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- spatie/laravel-ray: ^1.35
README
Sendmail is a modern, self-hosted email marketing core for Laravel. It provides campaigns, subscribers, tags, templates and multi-provider email sending as a headless package that you embed into your own application.
- Headless — no UI to fight; you build the interface
- Multi-provider — AWS SES, Mailgun, Mailjet, Postmark, Sendgrid, SMTP and Postal
- Multi-tenant — every record scoped to a workspace
- Tracking — deliveries, opens and clicks via provider webhooks
- REST API — manage campaigns, subscribers, tags and templates
Installation
composer require jegex/sendmail
Publish and run the migrations:
php artisan vendor:publish --tag="sendmail-migrations"
php artisan migrate
Optionally publish the config file:
php artisan vendor:publish --tag="sendmail-config"
Quick Setup
Register the routes in your application:
// routes/api.php Route::middleware(['auth:sanctum'])->group(function () { Sendmail::apiRoutes(); }); Sendmail::publicApiRoutes(); // routes/web.php Sendmail::publicWebRoutes();
Register a workspace resolver in a service provider:
public function boot(): void { Sendmail::setCurrentWorkspaceIdResolver(fn () => 1); }
Documentation
The full documentation is available in the docs directory, covering:
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.