Laravel Nova 发送邮件的动作。

4.9.0 2022-06-21 14:25 UTC

This package is auto-updated.

Last update: 2024-09-21 19:27:27 UTC


README

banner

Nova 邮件

Latest Version on Packagist Total Downloads

此包包含一个 Nova 动作,为任何资源提供邮件发送表单,以便轻松发送电子邮件。它还包括基于 Eloquent 模型事件/属性更改的自动邮件发送。

screenshot of the send mail action modal

screenshot of the send mail action modal with template selected

screenshot of mail template model events

要求

此 Nova 包需要 Nova 4.0 或更高版本。如果您使用的是 Nova 版本 < 4.0,则应使用 v1.0.4(不再更新)。

使用邮件延迟功能需要除同步以外的队列驱动程序。如果您使用的是 Amazon SQS 队列服务,最大延迟时间为 15 分钟。

安装

您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包

composer require kirschbaum-development/nova-mail

接下来,我们需要运行迁移。此包的服务提供程序的自动发现有助于此!

php artisan migrate

最后,您想要发送邮件的任何模型都需要在其上添加 Mailable 特性。模型应有一个符合规定的电子邮件列。您还需要实现 Mailable 特性提供的抽象方法,如下所示。如果您电子邮件列的名称不同,您应自定义此内容

use KirschbaumDevelopment\NovaMail\Traits\Mailable;

class User extends Model
{
    use Mailable;

    /**
     * Get the name of the email field for the model.
     *
     * @return string
     */
    public function getEmailField(): string
    {
        return 'email';
    }

    // ...
}

如果您想发布此包的配置,请运行

php artisan vendor:publish

然后选择此包的提供程序: KirschbaumDevelopment\NovaMail\NovaMailServiceProvider

用法

此包包含一个动作(SendMail)和两个资源(NovaMailTemplateNovaSentMail)。内部 SendMail 动作使用自定义 Nova 字段来显示内联邮件发送表单。

SendMail 动作

SendMail 动作直接将邮件表单插入到 Nova 动作模态中。此操作允许您快速将电子邮件直接发送到一个或多个资源。

只需将 KirschbaumDevelopment\NovaMail\Actions\SendMail 动作添加到您的 Nova 资源

namespace App\Nova;

use KirschbaumDevelopment\NovaMail\Actions\SendMail;

class User extends Resource
{
    // ...

    public function actions(Request $request)
    {
        return [
            // ...

            new SendMail,
        ];
    }
}

现在您可以从您的资源的“发送邮件”操作中发送电子邮件!

您还可以通过设置模板上的延迟分钟属性来延迟任何即将发出的电子邮件。就像主题和正文一样,您可以在发送邮件时覆盖模板中指定的邮件延迟。

在模型事件上触发邮件

可以配置 MailTemplate 以响应 Eloquent 模型事件或指定列的值更改。例如,当您的 User 模型上的 active 列更新时,可以发送通知用户其账户状态的邮件模板。

screenshot of the account status mail template

您甚至可以为“开启”和“关闭”配置不同的模型事件!

screenshot of the account status with value mail template

邮件模板使用/注意事项

NovaMailTemplate 资源允许您创建可重用的自定义模板,用于发送电子邮件。它通过获取您指定的模板(或覆盖的模板内容)并构建一个临时 blade 文件(可以通过配置选项永久保存 blade 文件)来实现。然后,以典型的 Laravel 方式使用此 blade 文件发送电子邮件。

用户单击“发送邮件”按钮时提供的最终内容被解析为 markdown,并且不假设换行或其他任何格式。例如,如果您要使用 Laravel 提供的内置邮件消息组件发送 markdown 电子邮件,则可以创建如下模板

@component('mail::message')
Hello {{ $name }},

Visit this link when you have a moment:

[https://github.com/kirschbaum-development/nova-mail](https://github.com/kirschbaum-development/nova-mail)

Let me know if you have any questions.

@include('path.to.footer')
@endcomponent

screenshot of the create mail template

已发送邮件使用

可以将 NovaSentMail 资源添加到具有定义在相应模型上的 Mailable 特性的任何 Resource 中的关系字段。这使您可以直接访问从该 Resource 发送的电子邮件历史记录。

namespace App\Nova;

use Laravel\Nova\Fields\HasMany;
use KirschbaumDevelopment\NovaMail\Nova\NovaSentMail;

class User extends Resource
{
    // ...

    public function fields(Request $request)
    {
        return [
            // ...

            HasMany::make('Sent Mail', 'mails', NovaSentMail::class),

            // ...
        ];
    }
}

screenshot of the sent mail index

资源自定义

如果您需要自定义应用程序中使用的 Nova 资源,例如添加过滤器、卡片或添加字段,您可以更改默认的类集合。首先,您需要覆盖配置文件中找到的 Resources 数组(如果您尚未发布配置文件,请参阅 安装 部分)

    /*
    |--------------------------------------------------------------------------
    | Default Resources
    |--------------------------------------------------------------------------
    |
    | This determines which Nova Resources you're using
    | You can change it as you wish
    |
    */
    'default_resources' => [
        'nova_mail_event' => App\Nova\YourNovaMailEventResource::class,
        'nova_mail_template' => App\Nova\YourNovaMailTemplateResource::class,
        'nova_sent_mail' => App\Nova\YourNovaSentMailResource::class,
    ],

之后,您可以 扩展 默认的 资源类 并添加如下自定义代码:

use KirschbaumDevelopment\NovaMail\Nova\NovaSentMail;

class YourNovaSentMailResource extends NovaSentMail
{
    public function cards(Request $request)
    {
        return [
            // Your custom code...
        ];
    }
}

变更日志

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

贡献

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

安全性

如果您发现任何与安全相关的问题,请通过电子邮件发送至 adam@kirschbaumdevelopment.comnathan@kirschbaumdevelopment.com,而不是使用问题跟踪器。

鸣谢

赞助

此包的开发由 Kirschbaum Development Group 赞助,这是一家以解决问题、团队建设和社区为中心的开发商驱动型公司。了解更多 关于我们加入我们

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件