Package Data | |
---|---|
Maintainer Username: | Xammie |
Maintainer Contact: | max@hoogenbos.ch (Max Hoogenbosch) |
Package Create Date: | 2022-07-05 |
Package Last Update: | 2024-11-20 |
Home Page: | https://mailbook.dev |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-23 03:09:08 |
Package Statistics | |
---|---|
Total Downloads: | 209,959 |
Monthly Downloads: | 13,703 |
Daily Downloads: | 493 |
Total Stars: | 443 |
Total Watchers: | 5 |
Total Forks: | 18 |
Total Open Issues: | 0 |
Mailbook is a Laravel package that lets you easily inspect your mails without having to actually trigger it in your application.
You can install the package via composer:
composer require --dev xammie/mailbook
Next install mailbook into your application
php artisan mailbook:install
The mailbook:install
command will create a route file named routes/mailbook.php
. In this file you can register your
emails.
// This will use dependency injection if your mailable has parameters
Mailbook::add(VerificationMail::class);
// Use a closure to customize the parameters of the mail instance
Mailbook::add(function (): VerificationMail {
$user = User::factory()->make();
return new VerificationMail($user, '/example/url')
});
Next head over to /mailbook
to preview the mailables.
You can both register mailables that live in App\Mails
and email notifications in App\Notifications
.
// Mailable
Mailbook::add(VerificationMail::class);
// Notification
Mailbook::add(InvoiceCreatedNotification::class);
You can also use dependency injection in the closure.
// With dependency injection
Mailbook::add(function (VerificationService $verificationService): VerificationMail {
return new VerificationMail($verificationService, '/example/url');
});
// Without dependency injection
Mailbook::add(function (): VerificationMail {
$verificationService = app(VerificationService::class);
return new VerificationMail($verificationService, '/example/url');
});
When creating mails you might have a couple of different scenario's that you want to test for one mail, you can use variants to solve this.
// Use a closure to customize the parameters of the mail instance
Mailbook::add(OrderCreatedMail::class)
->variant('1 item', fn () => new OrderCreatedMail(Order::factory()->withOneProduct()->create()))
->variant('2 items', fn () => new OrderCreatedMail(Order::factory()->withTwoProducts()->create()));
When your application supports multiple languages you need to easily preview your mails in these languages. To enable
this feature you have to add the following code to the mailbook.php
config file.
'locales' => [
'en' => 'English',
'nl' => 'Dutch',
'de' => 'German',
'es' => 'Spanish'
],
This will display a dropdown in mailbook which you can use to switch to a different language.
Most of the time your mailables will need database models. Sometimes you will even preform queries when rendering these mailables. Mailbook can automatically rollback database changes after rendering. You can enable it in the config with.
'database_rollback' => true,
You can now safely use factories and other queries when registering your mailables.
// All database changes are rolled back after rendering the mail.
Mailbook::add(function (): OrderShippedMail {
$order = Order::factory()->create();
$tracker = Tracker::factory()->create();
return new OrderShippedMail($order, $tracker);
});
Database rollback is disabled by default.
You can publish the config file with:
php artisan vendor:publish --tag="mailbook-config"
This is the contents of the published config file:
return [
'enabled' => env('APP_ENV') === 'local',
'database_rollback' => false,
'display_preview' => true,
'route_prefix' => '/mailbook',
'middlewares' => [Xammie\Mailbook\Http\Middlewares\RollbackDatabase::class],
'show_credits' => true,
];
Optionally, you can publish the views using
php artisan vendor:publish --tag="mailbook-views"
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.