filippo-toso / mailable
一个可配置的Laravel Mailable类,同时支持队列。
v1.0.6
2023-01-27 12:10 UTC
Requires
- php: ^7.2.5|^8.0
- laravel/framework: ^7.0|^8.0|^9.0|^10.0
README
一个可配置的Laravel Mailable类,同时支持队列。
要求
- PHP 7.2.5+
- Laravel 7+
安装
使用Composer进行安装
composer require filippo-toso/mailable
它做了什么?
它允许您根据外部因素使用不同的邮件设置(例如SMTP)来发送电子邮件。当您有一个多租户Laravel应用程序并希望为每个租户使用不同的SMTP账户时,此类非常有用。
它是如何工作的?
很简单,只需两步!
首先,从 FilippoToso\Mailable\Mailable
扩展您的邮件类,而不是从 Illuminate\Mail\Mailable
扩展
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\SerializesModels; use FilippoToso\Mailable\Mailable; class CustomerPurchase extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ public function __construct() { // } /** * Build the message. * * @return $this */ public function build() { return $this->view('view.name'); } }
然后,当您创建邮件实例时,调用 configure()
方法并传递您的自定义邮件配置。支持的参数与您在 mail.mailers
配置(在 config/mail.php
文件中)中放置的参数完全相同。
$mail = (new CustomerPurchase)->configure([ 'transport' => 'smtp', 'host' => 'smtp.mailgun.org', 'port' => 587, 'encryption' => 'tls', 'username' => 'username', 'password' => 'password', 'timeout' => null, 'auth_mode' => null, ]); Mail::to('filippo@toso.dev')->queue($mail);
您也可以这样做
$mail = new CustomerPurchase(); $mail->configure([ 'transport' => 'smtp', 'host' => 'smtp.mailgun.org', 'port' => 587, 'encryption' => 'tls', 'username' => 'username', 'password' => 'password', 'timeout' => null, 'auth_mode' => null, ]); Mail::to('filippo@toso.dev')->queue($mail);
就是这样!
如果您没有调用 configure()
方法,这个 Mailable
类将表现得与Laravel完全一样 ;)
不想扩展您的类?
如果您不想(或不能)扩展您的Mailable类,请像以下那样使用 FilippoToso\Mailable\Traits\MailableTrait
特性
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Mail\Mailable; use FilippoToso\Mailable\Traits\MailableTrait; class CustomerPurchase extends Mailable { use Queueable, SerializesModels, MailableTrait; /** * Create a new message instance. * * @return void */ public function __construct() { // } /** * Build the message. * * @return $this */ public function build() { return $this->view('view.name'); } }
结果是一样的 ;)