love4work / laravel-mail
扩展Laravel Mail核心功能
v0.1.5-alpha
2020-07-19 02:33 UTC
Requires
- php: ^7.4
- illuminate/container: ^6.0|^7.0
- illuminate/mail: ^6.0|^7.0
- illuminate/support: ^6.0|^7.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0
- phpunit/phpunit: ^8.4|^9.2
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"
一旦设置好类,更新您的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是合理的)