timedoor/mail-logger

Laravel 的出站邮件记录器

1.1.3 2023-03-09 06:05 UTC

This package is auto-updated.

Last update: 2024-09-09 09:12:54 UTC


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

贡献

contributions-wellcome

贡献始终欢迎!

许可

在 MIT 许可下许可,有关更多信息,请参阅LICENSE