filippo-toso/mailable

一个可配置的Laravel Mailable类,同时支持队列。

v1.0.6 2023-01-27 12:10 UTC

This package is auto-updated.

Last update: 2024-09-27 15:52:54 UTC


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');
    }
}

结果是一样的 ;)