发送成功事件的电子邮件通知

Sending email notification on successful event

我正在开发一个 Laravel 5.8 API 应用程序,需要在用户成功下订单时通知他们。订购流程有效,但我没有收到电子邮件通知。以下是我使用 mailtrap 进行演示的方法

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=**************
MAIL_PASSWORD=**************
MAIL_ENCRYPTION=tls

在 Order 模型中,我使用了通知特征

<?php

namespace App;

use App\User;
use App\Product;
use Illuminate\Notifications\Notifiable;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    use Notifiable;

    ...
}

创建了 OrderSuccesful 通知并像这样在 OrderController 存储方法中使用它

<?php

...

use App\Notifications\OrderSuccessful;

use App\Order;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function store(Request $request, Product $product)
    {
        // create order
        $order = Order::create([
            'user_id'       => auth()->user()->id,
            'product_id'    => $product->id,
            'barrels'       => $request->barrels,
            'status'        => 'successful'
        ]);

        $user = auth()->user();

        // notify user of successful order
        $user->notify(new OrderSuccessful($order));

        return new OrderResource($order);
    }
}

现在当我下单成功时,我没有收到通知。由于我是第一次使用通知,所以我想知道我错过了什么。如果有人可以指出并告诉我如何解决它,我将不胜感激。

这里你需要将 Notifiable trait 添加到 User 模型而不是 Order.

User.php

class User extends Authenticatable
{
    use Notifiable;
    //
}

创建 OrderSuccessful 通知 class 使用 artisan:

php artisan make:notification OrderSuccessful

OrderSuccessful class:

protected $order;

public function __construct(App\Order $order)
{
    $this->order = $order;
}

设置完上述所有内容后,您现在应该可以使用以下代码触发电子邮件:

$user->notify(new OrderSuccessful($order));


注意:

确保您的 users table 有一个包含正确电子邮件地址的 email 字段。

希望对您有所帮助!