timedoor / mail-logger
Laravel 的出站邮件记录器
Requires
- php: >=7.1.3
- laravel/framework: ^7.0|^8.0|^9.0
README
这是一个 Laravel 包,用于记录和重新发送出站邮件。此包会将所有出站邮件存储在数据库中,并跟踪它们是否成功发送。
安装
此包可以使用 composer 安装。
composer require timedoor/mail-logger
它将自动被 Laravel 检测到,但您也可以通过在 config/app.php
文件中的 providers
数组中添加以下行来手动注册包的 service provider。
'providers' => [ // \Timedoor\MailLogger\MailLoggerServiceProvider::class ]
默认情况下,此包将在数据库迁移中使用 mail_logs
作为表名,但您可以通过编辑 config/mail_logger.php
来更改它。在此之前,您需要通过运行以下命令发布配置:
php artisan vendor:publish --tag=mail-logger
运行迁移以创建存储邮件所需的表。
php artisan migrate
这将创建一个名为 mail_logs
的表,或您在配置文件中指定的任何名称。
使用方法
默认情况下,此包会记录所有出站的 mailables 和通知。
忽略记录的 Mailables 和 Notifications
如果您想忽略某些 mailables 或通知被记录,您可以将它们添加到 config/mail_logger.php
文件中的 ignore
数组中。
重新发送邮件
您可以使用以下命令重新发送任何邮件:
php artisan mail-logger:resend-mail 1
这里的 1 表示要重新发送的邮件的 ID。上面的命令将以记录的邮件发送的方式发送邮件,例如:如果您使用队列发送,它也将使用队列重新发送邮件。如果您想立即发送邮件,可以添加选项 --now
。
php artisan mail-logger:resend-mail 1 --now
重新发送所有未发送的邮件
如果您想重新发送所有未发送的邮件,您可以使用以下 artisan 命令:
php artisan mail-logger:resend-unsent-mail
或者
php artisan mail-logger:resend-unsent-mail --now
由于此命令只会重新发送未成功发送的邮件,因此您可以安全地安排此命令来重新发送您的失败邮件。
$schedule->command('mail-logger:resend-unsent-mail')->daily();
删除旧条目
由于此包记录了所有出站邮件,因此您的数据库表会迅速增长。为了自动删除旧条目,此包提供了一个 artisan 命令来安排删除旧条目。
您可以通过将以下行添加到您的调度器中来安排删除旧条目。
$schedule->command('mail-logger:prune --hours=72')->daily();
这将删除所有72小时之前的条目。
通过控制器运行
如果您想通过控制器重新发送或修剪邮件,请参阅以下示例
<?php use Timedoor\MailLogger\Logger\MailLogger; use Timedoor\MailLogger\Models\MailLog; class MailController extends Controller { public function resend(MailLog $email) { MailLogger::resendMailById($email->id, true); //true for --now option return redirect()->back(); } public function resendAll(MailLog $email) { MailLogger::resendUnsentMails(true); //true for --now option return redirect()->back(); } public function prune($x) { MailLogger::pruneMails(now()->subHours($x)); // prune emails older than $x hours return redirect()->back(); } }
贡献
贡献始终欢迎!
许可
在 MIT 许可下许可,有关更多信息,请参阅LICENSE。