Laravel学习-发送邮箱

 路由控制器

        发送邮件验证码路由

        更新邮箱的路由

1.配置邮箱

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com //这个是你用的哪里的邮箱,就用他们的地址
MAIL_PORT=465
MAIL_USERNAME=12621@qq.com      //邮箱的账号
MAIL_PASSWORD=ANNSDEDJJDJ       //授权码
MAIL_ENCRYPTION=ssl             //加密方式, 协议是https,都是ssl加密方式
MAIL_FROM_ADDRESS=12621@qq.com  //发件人, 从哪个邮箱发给用户的
MAIL_FROM_NAME="某某商城"        //发件人的姓名

这里是要将你的邮箱的smtp服务开启 

Laravel发送邮箱

 Laravel发送邮箱

2.配置队列 

database 队列驱动,你需要一张数据表来存储任务。

运行 queue:table Artisan 命令来创建这张表的迁移文件。

当迁移文件创建好后,你就可以使用 migrate 命令来进行迁移:

php artisan queue:table

php artisan migrate

更改queque队列配置文件: config\queue.php

'default' => env('QUEUE_CONNECTION', 'sync') // 这个不用动

// 在.env中找到 QUEUE_CONNECTION 改成
QUEUE_CONNECTION=database

 运行队列, 但是这里有个问题,如果这个的进程被关掉就不能运行了, 所以使用运行进程Supervisor 

php artisan queue:work

 Supervisor 

地址: 队列 |《Laravel 6 中文文档 6.x》| Laravel China 社区

sudo apt-get install supervisor

Supervisor 的配置文件通常位于 /etc/supervisor/conf.d 目录下。

在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程。

例如,创建一个 laravel-worker.conf 文件使之启动和监控一个

[program:shopapi] //进程的名称 不要和别人的一样
process_name=%(program_name)s_%(process_num)02d
command=php /D:/phpstudy_pro/WWW/antDesignProLaravel/laravel/artisan queue:work // 命令的位置
autostart=true
autorestart=true
user=forge  // 用户; 终端前的那个用户
numprocs=8 //进程数
redirect_stderr=true
stdout_logfile=/D:/phpstudy_pro/WWW/antDesignProLaravel/laravel/storage/logs/worker.log // 守护进程的日志

进入/etc/supervisor/conf.d下

然后创建文件, 把上面的复制进去, ctrl+x 退出保存

cd /etc/supervisor/conf.d
sudo nano shopapi.conf

 启动 Supervisor

sudo supervisorctl reread

sudo supervisorctl update // 这个就行

sudo supervisorctl start laravel-worker:*

生成事件和监听器

// 先到App\Providers\EventServiceProvider 这个类文件中添加
    protected $listen = [
        // orderPost 事件名
        'App\Events\orderPost' => [
            // SendEmailToUser 监听事件名
            'App\Listeners\SendEmailToUser',
        ],
    ];


php artisan event:generate

 OrderShoped.php

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class OrderShoped
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $order;
    public $express_type;
    public $express_no;

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

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

SendShopToUser.php

<?php

namespace App\Listeners;

use App\Events\OrderShoped;
use App\Mail\Order\orderpost;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;

class SendShopToUser
{

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {

    }

    /**
     * Handle the event.
     *
     * @param  OrderShoped  $event
     * @return void
     */
    public function handle(OrderShoped $event)
    {
        $event->order->express_type = $event->express_type;
        $event->order->express_no = $event->express_no;
        $event->order->status = 3;
        $event->order->save();
        // 发货之后 邮件提醒
        // 发送邮件
        Mail::to('1262195190@qq.com')->queue(new orderpost());
    }
}


1. 创建邮箱类

php artisan make:mail Order/orderpost

Mail/Order/orderpost

<?php

namespace App\Mail\Order;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class orderpost extends Mailable
{
    use Queueable, SerializesModels;
    protected $order;

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

    /**
     * 渲染邮箱视图
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.order-post',[
            'order' => $this->order
        ]);
    }
}

  这里是发送邮箱的一个方法

use Illuminate\Support\Facades\Mail;
use App\Mail\Order\orderpost;

public fucntion index()
{
    // send('这里是你刚才创建邮箱类的时候的那个文件orderpost')
    // 当订单$order传进去的时候, orderpost这个类文件就可以接收到你穿的值了, 然后orderpost类文件触发build方法渲染视图
    // Mail::to('购买者的邮箱')->send(new orderpost($order));

    // 使用队列
    // Mail::to('购买者的邮箱')->queue(new orderpost($order));
    
    // 使用事件
    // 使用辅助函数分发,发送邮件
    event(new \App\Events\OrderShoped($orders, '$express_type', '$express_no'));

    // 使用事件分发
    \App\Events\OrderShoped::dispatch($orders, '$express_type', '$express_no')
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值