Laravel学习-发送邮箱

zz/2024/5/21 21:28:38

 路由控制器

        发送邮件验证码路由

        更新邮箱的路由

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:tablephp 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 rereadsudo 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

<?phpnamespace 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

<?phpnamespace 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

<?phpnamespace 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')
}


http://www.ngui.cc/zz/2732120.html

相关文章

php学习-常量

学习来源: 黑马程序员PHP零基础入门到精通教程&#xff08;P1基础6天&#xff09;_哔哩哔哩_bilibili 一. 定义常量的两种方式 (5.3之后才有两种) 1. 使用定义常量的函数: define(常量名, 常量值); 2. 5.3之后才有的: const 常量名 123 二. 命名规则 1. 常量不需要使用 $…

1.1 CPU占用率

下面是一些了解当前线程/进程/系统效能的API&#xff0c;所有描述来自MSDN文档&#xff0c;具体如下&#xff1a; 注意每个函数对应的头文件和相应的lib. DWORD GetTickCount(void);/*Header: Winbase.h, include Windows.hLink Library: Kernel32.libDLL: Dernel32.dllDetail…

VC 2005 coding shortcuts

coding 了这么多年,有些快捷键没用了老忘,有空把它整出来(备忘) 一些还不怎么熟悉使用的快捷键&#xff1a;//debug: AltF10 &#xff1a;Apply codes changes CtrlF10 &#xff1a;Run to cursor ShiftF11 &#xff1a;跳出当前函数CtrlShiftF10 &a…

[转]Cygwin使用

最近需要用到bash,perl等脚本&#xff0c;找到cygwin来学学... 很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下&#xff0c;但是往往怕linux系统打乱了自己的正常生活&#xff1a;1〉装linux系统把windows系统给搞坏了&#xff0c;导致自己无法正常生活&a…

ExtJs之grid使用详解(转帖)

Ext2.0是一个javascript框架&#xff0c;它的Grid控件和其它可以显示数据的控件&#xff0c;能够支持多种数据类型&#xff0c;如二维数组、Json数据和XML数据&#xff0c;甚至包括我们自定义的数据类型。Ext为我们提供了一个桥梁Ext.data.Store&#xff0c;通过它我们可以把任…

Oracle存储过程总结 (内容转载)

1、创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test;-- E.g: 打印出输入的时间信息create or replace procedure test(workDate in Date) is begin dbms_output.…

Java的抽象类和接口示例

最近在学习java&#xff0c;在抽象类和接口上有这样一个示例。 代码如下&#xff1a; 下面展示一些 内联代码片。 package TaskFive; //打印机抽象类 //抽象类中的抽象方法&#xff0c;方法的具体实现由子类确定 abstract class Printer {abstract void pri(String s);//打印a…

Servlet补充学习——《JSP Web开发应用》

Servlet是java服务器端的小程序&#xff0c;是Java环境下实现动态网页的基本技术。Servlet程序能够调用Javabean、JDBC、其他servlet、RML等程序完成指定的功能。在应用中servlet起到了中间层的作用&#xff0c;将客户端和后台的资源隔离开来。 servlet有支持servlet的服务器&a…

Python的For+While循环的课堂练习(附上文连接)

>> Python每日笔记—Day04 << # 课堂小作业1-Star&#xff1a; # 通过while循环嵌套 实现如下图形 # ****...*** # * * # * * # * * # ****...***row int(input("请输入行数")) col int(input("请输入列数")) i 0 j…

Python使用Tkiner进行MD5加密

MD5加密 from tkinter import * import hashlib import timeLOG_LINE_NUM 0 # 日志信息内容class mu_gui():def __init__(self, init_window_name):self.init_window_name init_window_name# 窗口布局的方法def set_init_window(self):self.init_window_name.titleMD5加密…