Installation
composer require jeffersongoncalves/filament-mail
Publish the package assets and config:
php artisan vendor:publish --provider="JeffersonGoncalves\FilamentMail\FilamentMailServiceProvider" --tag="filament-mail-config"
php artisan vendor:publish --provider="JeffersonGoncalves\FilamentMail\FilamentMailServiceProvider" --tag="filament-mail-assets"
Run Migrations
php artisan migrate
Register the Plugin
Add to app/Providers/Filament/AdminPanelProvider.php:
return [
// ...
'plugins' => [
\JeffersonGoncalves\FilamentMail\FilamentMailPlugin::make(),
],
];
First Use Case
Template Management
en, pt).
// Define a template in a migration or seeder
\JeffersonGoncalves\LaravelMail\Models\Template::create([
'name' => 'Welcome Email',
'subject' => 'Welcome to Our Platform',
'html' => '<h1>Hello, {name}!</h1>',
'locales' => json_encode(['en' => ['subject' => 'Welcome...'], 'pt' => ['subject' => 'Bem-vindo...']]),
]);
{{ template('footer') }}.Email Sending
use JeffersonGoncalves\LaravelMail\Facades\LaravelMail;
LaravelMail::send([
'template' => 'welcome_email',
'to' => 'user@example.com',
'data' => ['name' => 'John Doe'],
]);
Analytics & Tracking
mail.sent or mail.opened events:
event(new \JeffersonGoncalves\LaravelMail\Events\MailSent($mail));
Suppression Lists
$suppression = \JeffersonGoncalves\LaravelMail\Models\Suppression::create([
'email' => 'unsubscribed@example.com',
]);
config/filament-mail.php to queue emails by default:
'queue' => true,
Mailable class to integrate with existing Laravel mailables:
use JeffersonGoncalves\LaravelMail\Mailables\Mailable;
class CustomMailable extends Mailable
{
public function build()
{
return $this->subject('Custom Subject')->view('emails.custom');
}
}
resources/lang/{locale}/filament-mail.php):
return [
'templates' => [
'welcome_email' => [
'subject' => 'Personalizado para {locale}',
],
],
];
Migration Conflicts
laravel-mail, ensure the templates and mailables tables are not duplicated. Run:
php artisan vendor:publish --tag="laravel-mail-migrations" --force
before migrating.Template Caching
php artisan view:clear
Queue Stuck Emails
php artisan queue:restart
Multi-Locale Sync
config/app.php under locales. Missing locales may break template rendering.storage/logs/laravel-mail.log for rendering errors.config/filament-mail.php:
'tracking' => [
'events' => false,
],
Custom Fields
// app/Providers/FilamentMailServiceProvider.php
FilamentMail::registerTemplateField(
'dynamic_content',
\JeffersonGoncalves\FilamentMail\Fields\DynamicContentField::class
);
API Access
// routes/api.php
Route::middleware('auth:sanctum')->post('/send-mail', [\App\Http\Controllers\MailController::class, 'send']);
Webhook Integration
// app/Providers/EventServiceProvider.php
protected $listen = [
\JeffersonGoncalves\LaravelMail\Events\MailOpened::class => [
\App\Listeners\UpdateTracking::class,
],
];
Bulk Actions
// app/Providers/FilamentMailServiceProvider.php
FilamentMail::tableActions([
Tables\Actions\BulkAction::make('suppress')
->action(function (Collection $records) {
$records->each->suppress();
}),
]);
config/filament-mail.php:
'locales' => [
'fallback' => 'en',
],
'assets' => [
'path' => 'cdn.example.com/storage/filament-mail',
],
How can I help you explore Laravel packages today?