Laravel Mailable 测试教程
项目介绍
laravel-mailable-test
是一个由 Spatie 开发的 Laravel 包,旨在通过 Artisan 命令轻松测试邮件发送功能。该包允许开发者快速发送和测试 Mailable 类,确保邮件内容和格式正确无误。
项目快速启动
安装
首先,通过 Composer 安装 laravel-mailable-test
包:
composer require spatie/laravel-mailable-test
配置
安装完成后,可以发布配置文件(可选):
php artisan vendor:publish --provider="Spatie\MailableTest\MailableTestServiceProvider" --tag="config"
配置文件内容如下:
return [
'argument_value_provider_class' => \Spatie\MailableTest\FakerArgumentValueProvider::class,
'base_namespace' => 'App\Mail',
];
使用
通过以下 Artisan 命令发送任何 Mailable:
php artisan mail:send-test "App\Mail\MyMailable" recipient@example.com
应用案例和最佳实践
测试邮件内容
在测试邮件内容时,可以使用以下方法:
$mailable = new MyMailable();
$mailable->assertHasAttachedData($pdfData, 'name.pdf', ['mime' => 'application/pdf']);
$mailable->assertHasAttachmentFromStorage('/path/to/file', 'name.pdf', ['mime' => 'application/pdf']);
$mailable->assertHasAttachmentFromStorageDisk('s3', '/path/to/file', 'name.pdf', ['mime' => 'application/pdf']);
测试邮件发送
建议将邮件内容的测试与邮件发送的测试分开。通常,邮件内容与正在测试的代码无关,只需断言 Laravel 被指示发送特定的 Mailable 即可。可以使用 Mail
facade 的 fake
方法来防止邮件实际发送:
use Illuminate\Support\Facades\Mail;
Mail::fake();
// 执行发送邮件的操作
Mail::assertSent(MyMailable::class, function ($mail) {
return $mail->hasTo('recipient@example.com');
});
典型生态项目
Laravel Mail 预览
Laravel 允许你在浏览器中快速预览 Mailable 的设计,就像预览 Blade 模板一样。可以在路由或控制器中返回 Mailable:
Route::get('/mailable', function () {
$invoice = App\Models\Invoice::find(1);
return new App\Mail\InvoicePaid($invoice);
});
本地化 Mailable
Laravel 允许你为每个收件人本地化 Mailable:
foreach (['[email protected]', '[email protected]'] as $recipient) {
Mail::to($recipient)->send(new OrderShipped($order));
}
使用特定 Mailer 发送邮件
默认情况下,Laravel 使用应用配置文件中定义的默认 mailer 发送邮件。可以使用 mailer
方法指定特定的 mailer 配置:
Mail::mailer('postmark')
->to($request->user())
->send(new OrderShipped($order));
队列邮件
发送邮件可能会影响应用的响应时间,因此许多开发者选择将邮件放入队列中进行后台发送。Laravel 提供了内置的统一队列 API 来简化这一过程:
Mail::to($request->user())
->queue(new OrderShipped($order));
通过这些方法,你可以确保邮件发送的可靠性和效率,同时保持应用的响应性能。