love4work/laravel-mail

扩展Laravel Mail核心功能

v0.1.5-alpha 2020-07-19 02:33 UTC

This package is auto-updated.

Last update: 2024-09-19 11:25:35 UTC


README

本包旨在为Laravel提供的当前Mailer提供一些灵活性。

它试图为您解决的一些难题

  • 通过扩展默认的Mailer和Message来编写自己的逻辑
  • 支持Mailer扩展(见MailerExtensions)
  • 支持使用可配置的DKIMProvider对Message进行DKIM签名

版本兼容性

本包支持Laravel 6.x和7.x

安装

要通过composer安装,请在终端运行以下命令

composer require "love4work/laravel-mail"

创建自己的MailerMessage

一旦设置好类,更新您的config/mail.php

<?php
return [
    //
    
    'customize' => [
        'mailer' => \App\Mail\Mailer::class,
        'message' => \App\Mail\Message::class,
    ]
];

用法

默认情况下,Laravel Mail允许您完全访问扩展我们的Mailer和Message

Mailer

<?php

namespace App\Mail;

class Mailer extends \Love4Work\Laravel\Mail\Mailer
{
    //
}

Message

您至少需要通过 traits 扩展我们的Message类来添加您想要使用的功能

<?php

namespace App\Mail;

use Love4Work\Laravel\Mail\Message\AttachDkimTrait;

class Message extends \Love4Work\Laravel\Mail\Message
{
    use AttachDkimTrait;
}

设置服务提供者

要使用Laravel Mail扩展,您只需扩展\Love4Work\Laravel\Mail\MailExtensionServiceProvider并添加您想要的扩展。格式非常简单,在$extensions中,键是您想要钩入的功能,您可以传递一个包含您希望调用的多个函数的数组,但请记住,您想要调用的这些函数实际上存在。

在这个特定的createMessage案例中,主题是Message,我们设置的回调函数是attachDkim。这意味着atttachDkim必须存在,多亏了我们的AttachDkimTrait。请参阅我们的测试服务提供者

<?php

class MailExtensionServiceProvider extends \Love4Work\Laravel\Mail\MailExtensionServiceProvider
{
    protected array $extensions = [
        'createMessage' => [
            'attachDkim'
        ]
    ];
    // see full options on how to implement this in our test ServiceProvider
}

将您的新服务提供者添加到config/app.php中的providers数组

<?php
[
    //
    'providers' => [
    
        /*
         * Application Service Providers...
         */
        App\Providers\MailExtensionServiceProvider::class,
        
    ]
    //
];

使用DkimProvider

DkimProvider使我们能够注入我们的DKIM值。在这个示例中,我们从配置中获取数据。

<?php

class MailExtensionServiceProvider extends \Love4Work\Laravel\Mail\MailExtensionServiceProvider
{

    public function register()
    {
        parent::register();

        // Here we can modify how we want to populate our DkimProvider
        $this->app->singleton(DkimProviderContract::class,
            fn($app) => new DkimProvider(
                config('mail.dkim_selector'),
                config('mail.dkim_domain'),
                storage_path(config('mail.dkim_private_key'))
            )
        );
    }
}

注意:dkim_private_key可以是字符串,或指向pem文件的路径。

贡献

所有贡献都受到欢迎!(但请先提交一个问题以确保PR是合理的)