xammie/mailbook

Laravel 邮件探索器

资助包维护!
xammie

1.8.1 2024-04-10 17:15 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Mailbook 是一个 Laravel 扩展包,允许您轻松检查邮件,而无需在应用程序中实际触发它。

Example screenshot

查看演示

安装

您可以通过 composer 安装此包

composer require --dev xammie/mailbook

接下来,将 mailbook 安装到您的应用程序中

php artisan mailbook:install

使用方法

mailbook:install 命令将创建一个名为 routes/mailbook.php 的路由文件。在此文件中,您可以注册您的邮件。

// 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')
});

接下来,转到 /mailbook 预览可邮寄的邮件。

注册邮件

您可以注册位于 App\Mails 的可邮寄邮件和位于 App\Notifications 的电子邮件通知。

// Mailable
Mailbook::add(VerificationMail::class);

// Notification
Mailbook::add(InvoiceCreatedNotification::class);

您还可以在闭包中使用依赖注入。

// 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');
});

发送给用户

大多数情况下,通知需要一个用户(在通知类中也称为 notifiable)。您可以使用 ::to() 方法设置所需用户。

$user = User::factory()->create();

Mailbook::to($user)->add(WelcomeNotification::class);

如果您不需要用户,也可以传递一个电子邮件地址。

Mailbook::to('example@mailbook.dev')->add(WelcomeNotification::class)

分组多个邮件

您可以将多个邮件分组到同一类别下。这可以通过使用 category()group() 方法来完成。

Mailbook::category('Invoices')->group(function () {
    Mailbook::add(InvoiceCreatedNotification::class);
    Mailbook::add(InvoicePaidNotification::class);
});

为了避免在需要它的每个可邮寄邮件上传递相同的 to(),您还可以使用 group() 方法。这将使用组内的每个可邮寄邮件的 notifiable。

Mailbook::to('example@mailbook.dev')->group(function () {
    Mailbook::add(WelcomeNotification::class);
    Mailbook::add(TrialEndedNotification::class);
});

您还可以将 category()to() 串联到同一个组中。

Mailbook::to('example@mailbook.dev')
    ->category('Invoices')
    ->group(function () {
        // ...
    });

变体

在创建邮件时,您可能需要对同一邮件进行几种不同的场景测试,您可以使用变体来解决此问题。

// 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()));

本地化

当您的应用程序支持多种语言时,您需要轻松预览这些语言中的邮件。要启用此功能,您必须将以下代码添加到 mailbook.php 配置文件中。

'locales' => [
    'en' => 'English',
    'nl' => 'Dutch',
    'de' => 'German',
    'es' => 'Spanish'
],

这将在 mailbook 中显示一个下拉菜单,您可以使用它来切换到不同的语言。

Localization

使用数据库

大多数情况下,您的可邮寄邮件将需要数据库模型。有时,您甚至会在渲染这些可邮寄邮件时执行查询。Mailbook 可以在渲染后自动回滚数据库更改。您可以在配置中启用它。

'database_rollback' => true,

现在,您可以在注册可邮寄邮件时安全地使用工厂和其他查询。

// 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);
});

默认情况下禁用数据库回滚。

发送邮件

如果您想确保一切显示正确,则在浏览器外测试您的邮件非常重要。您可以使用 Mailbook 通过您的默认邮件驱动程序将邮件发送到您选择的电子邮件地址。这将显示右上角的一个按钮,当按下该按钮时,将当前选定的电子邮件发送到指定的地址。您可以在配置中启用此功能

'send' => true,
'send_to' => 'test@mailbook.dev',

自定义

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="mailbook-config"

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="mailbook-views"

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。