philsown / maileable
Maileable,一个用于为 Laravel Mailable 消息添加过滤器的库
Requires
- php: >=5.6.4
Requires (Dev)
- laravel/framework: ^5.5
- mockery/mockery: ^1.0
- phpunit/phpunit: ^6.4
This package is not auto-updated.
Last update: 2024-09-18 04:35:24 UTC
README
此代码处于积极开发中,没有发布。请勿使用此库。这主要在github上,所以Paul可以阅读它。嗨,Paul!
关于 Maileable
Maileable 是一个用于为 Laravel Mailable 消息添加过滤器的库,可以在消息发送之前修改 Mailable 或 Swift_Message 对象。将其视为电子邮件的响应中间件。
“Maileable” 这个名字是对“malleable”(可塑的)一词的戏谑,在英语中,除了其他含义外,还意味着“易受影响;柔韧的”。这个库的目标是在发送消息之前轻松更改消息。
为什么
示例目录中有几个案例,例如确保发件人有姓名并且格式整洁,在邮件主题前添加品牌,或在邮件正文中添加或修改内容。最后一个案例最好使用 Blade 模板处理,但这里演示了概念。您可以修改电子邮件标题。记录。我相信还有很多想法。
为什么不用 Illuminate\Mail\Events\MessageSending
事件?嗯,是的,你也可以这样做,我想。这基本上给你提供了分组你的 Mailable 命名空间(如 Mail\Orders
或 Mail\Newsletter
)并基于命名空间应用过滤器的可能性。
如何
安装
使用 Composer 安装。
将仓库添加到你的 composer.json
文件中。
{ "repositories": [ { "type": "git", "url": "https://github.com/philsown/maileable" } ] }
将 minimum-stability
设置为 dev
。
{ "minimum-stability": "dev", }
使用 require 命令安装。
$ composer require philsown/mailable
将服务提供者添加到 config/app.php
提供者的数组中。
<?php return [ // ... 'providers' => [ // ... /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, // add Maileable anywhere in here, really Maileable\Providers\MailFilterServiceProvider::class, ], // ... ];
发布供应商配置。
$ php artisan vendor:publish --provider=Maileable\Providers\MailFilterServiceProvider --tag=config
这将创建 config/maileable.php
。编辑此文件以将过滤器连接到你的 Mailable。下面将进行解释。
使用
简短版本
- 更新 Mailable 的
use
语句以使用 Maileable 的类,抱歉 :( - 使用
make:mailfilter
生成器创建一个邮件过滤器。 - 完善过滤器方法。
- 在发布的
config/maileable.php
文件中将过滤器连接起来。
长版本
步骤 1:更新现有 Mailable 类中的 Mailable use
语句
对此表示歉意。如果有人知道如何解决这个问题,我将非常乐意听取。
<?php # app/Mail/YourEmail.php namespace App\Mail; // Change this line in your Mailable class use Maileable\Mail\Mailable; // everything else is the same class YourEmail extends Mailable { public function build() { // the rest of this class is unchanged } }
步骤 2:使用生成器创建邮件过滤器
有一个生成器可以使用这个 artisan 命令
$ php artisan make:mailfilter YourFilterName
此命令除了名称外没有其他参数。这将从一个位于 app\Mail\Filters
目录的存根中创建一个邮件过滤器,如果该目录不存在,则创建该目录。
步骤 3:完善过滤器类的过滤器方法
选择您要过滤的类是 \Swift_Message
还是 Illuminate\Mail\Mailable
。
如果您想过滤 \Swift_Message
类,将 $modifies
设置为 'swift'(或者去掉它并让它默认来自 FilterAbstract
)。这是默认设置,让您可以轻松地调整电子邮件消息的细节。此过滤发生在邮件发送器调用 Illuminate\Mail\Mailable::runCallbacks
时,基本上是在最后可能的点。
如果您想过滤 Illuminate\Mail\Mailable
,请将 $modifies
设置为 'mailable'
。如果您想使用 Mailable 类中包含的任何信息,例如获取 Mailable 的类名或视图名,这很有用。这个过滤操作发生在调用 Mailable::send
方法时。这只是做事的一种稍微不同一点的方法,但我认为有一个选择是好的。
使用 @param
phpdoc 告诉您的 IDE 消息变量的类型。
对于 \Swift_Message
,使用
<?php /** * Filter * * @param Swift_Message $message * * @return void */ public function filter($message)
对于 Illuminate\Mail\Mailable
,使用
<?php /** * Filter * * @param Mailable $message * * @return void */ public function filter($message)
然后简单地用一些执行您所需操作的代码填充过滤方法。
<?php // ... /** * Filter * * @param Mailable $message * * @return void */ public function filter($message) { $froms = $message->from; foreach ($froms as &$from) { if ('contact@mycompany.com' != $from['address'] || !empty($from['name'])) { continue; } $from['name'] = 'My Company'; } $message->from = $froms; } // ...
步骤 4。将过滤方法连接到上面发布的 config/maileable.php
文件
将过滤连接到配置文件 config/maileable.php
中的各种 Mailable 类。这是通过使用模式选择类,然后为匹配该模式的 Mailable 分配一个或多个过滤器来实现的。
<?php return [ 'filters' => [ 'App\Mail\*' => [ \App\Mail\Filters\ThinkBeforeYouPrint::class, \App\Mail\Filters\AddSubjectBranding::class, ], 'App\Mail\Orders\*' => [ \App\Mail\Filters\ShippingDisclaimer::class, ], 'App\Mail\Newsletter\*' => [ \App\Mail\Filters\AddUnsubscribeHeaders::class, ], ], ];
支持和问题
可能存在很多问题,我从未在队列消息中使用过它,所以... YMMV。但是,试试看,让我知道进展情况或者如果您需要帮助的话!
贡献
感谢您的关注!要贡献,请fork这个仓库并提交一个pull request。
许可
Maileable 是开源软件,许可协议为 MIT 许可。