mvanduijker/laravel-transactional-mails

此包的最新版本(1.8.0)没有提供许可信息。

在数据库事务提交后发送邮件

1.8.0 2024-03-13 20:29 UTC

This package is auto-updated.

Last update: 2024-09-13 21:29:36 UTC


README

Latest Version on Packagist Build Status Total Downloads

在数据库事务提交后发送你的邮件。

此包防止在事务失败时在事务中发送邮件。它将缓冲邮件(或队列中的邮件)并在事务提交后发送(或队列)它们。特别是当在事务中发送电子邮件并在事务提交之前作业提取电子邮件时,作业可能会检索到无效数据。

安装

您可以通过composer安装此包

composer require mvanduijker/laravel-transactional-mails

用法

您只需扩展您的mailable为Duijker\LaravelTransactionalMails\TransactionalMailable而不是Illuminate\Mail\Mailable

<?php

namespace App\Mail;

use App\Order;
use Duijker\LaravelTransactionalMails\TransactionalMailable;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;

class OrderShipped extends TransactionalMailable
{
    use Queueable, SerializesModels;

    /**
     * The order instance.
     *
     * @var Order
     */
    protected $order;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.orders.shipped')
                    ->with([
                        'orderName' => $this->order->name,
                        'orderPrice' => $this->order->price,
                    ]);
    }
}
<?php

namespace App\Http\Controllers;

use App\Order;
use App\Mail\OrderShipped;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;

class OrderController extends Controller
{
    /**
     * Ship the given order.
     *
     * @param  Request  $request
     * @param  int  $orderId
     * @return Response
     */
    public function ship(Request $request, $orderId)
    {
        $order = Order::findOrFail($orderId);
        
        DB::transaction(function () use ($order, $request) {
            $order->ship();
            Mail::to($request->user())->send(new OrderShipped($order));
            
            throw new \RuntimeException('Mail won\'t be sent');
        });
        
    }
}

测试

composer test

变更日志

请参阅变更日志以获取最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件以获取更多信息。