邮件发送如何配置参考:https://www.cnblogs.com/clubs/p/10640682.html
优先配置文件 .env 如下:
1 QUEUE_DRIVER=redis 2 3 REDIS_HOST=127.0.0.1 4 REDIS_PASSWORD=****** 5 REDIS_PORT=6379
当.env 文件没有配置 或者 设置变量为空时,则会按照 config/queue.php 文件的配置信息运行laravel
config/queue.php 文件如下:
1 return [ 2 ‘default‘ => env(‘QUEUE_DRIVER‘, ‘redis‘),//修改队列驱动,使用redis 3 4 ‘connections‘ => [ 5 ‘sync‘ => [ 6 ‘driver‘ => ‘sync‘, 7 ], 8 9 ‘database‘ => [ 10 ‘driver‘ => ‘database‘, 11 ‘table‘ => ‘jobs‘, 12 ‘queue‘ => ‘default‘, 13 ‘retry_after‘ => 90, 14 ], 15 16 ‘beanstalkd‘ => [ 17 ‘driver‘ => ‘beanstalkd‘, 18 ‘host‘ => ‘localhost‘, 19 ‘queue‘ => ‘default‘, 20 ‘retry_after‘ => 90, 21 ], 22 23 ‘sqs‘ => [ 24 ‘driver‘ => ‘sqs‘, 25 ‘key‘ => env(‘SQS_KEY‘, ‘your-public-key‘), 26 ‘secret‘ => env(‘SQS_SECRET‘, ‘your-secret-key‘), 27 ‘prefix‘ => env(‘SQS_PREFIX‘, ‘https://sqs.us-east-1.amazonaws.com/your-account-id‘), 28 ‘queue‘ => env(‘SQS_QUEUE‘, ‘your-queue-name‘), 29 ‘region‘ => env(‘SQS_REGION‘, ‘us-east-1‘), 30 ], 31 32 ‘redis‘ => [ 33 ‘driver‘ => ‘redis‘, 34 ‘connection‘ => ‘default‘, 35 ‘queue‘ => ‘default‘, 36 ‘retry_after‘ => 90, 37 ‘block_for‘ => null, 38 ], 39 ], 40 41 ‘failed‘ => [ 42 ‘database‘ => env(‘DB_CONNECTION‘, ‘mysql‘), 43 ‘table‘ => ‘failed_jobs‘, 44 ], 45 ];
使用artisan命令 在app/Jobs 目录下创建执行队列任务的类:
php artisan make:job SendEmail
app/Jobs/SendEmailCode.php 代码如下:
1 <?php 2 3 namespace App\Jobs; 4 5 use Illuminate\Bus\Queueable; 6 use Illuminate\Queue\SerializesModels; 7 use Illuminate\Queue\InteractsWithQueue; 8 use Illuminate\Contracts\Queue\ShouldQueue; 9 use Illuminate\Foundation\Bus\Dispatchable; 10 use Illuminate\Support\Facades\Mail; 11 use App\Models\RecruitUser as User; 12 13 class SendEmail implements ShouldQueue 14 { 15 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 16 17 protected $user; 18 19 /** 20 * Create a new job instance. 21 * 22 * @return void 23 */ 24 public function __construct(User $user) 25 { 26 $this->user = $user; 27 } 28 29 /** 30 * Execute the job. 31 * 32 * @return void 33 */ 34 public function handle() 35 { 36 $user = $this->user; 37 Mail::raw(‘这里填写邮件的内容‘, function ($message) { 38 // 发件人(你自己的邮箱和名称) 39 $message->from(‘m13760754369@163.com‘, ‘jackie‘); 40 // 收件人的邮箱地址 41 $message->to($this->user->email); 42 // 邮件主题 43 $message->subject(‘队列发送邮件‘); 44 }); 45 } 46 }
1 <?php 2 3 namespace App\Http\Controllers\Home; 4 5 use App\Jobs\SendEmail; 6 use App\Http\Controllers\Controller; 7 use Illuminate\Http\Request; 8 use App\Models\RecruitUser as User; 9 10 class MessageController extends Controller 11 { 12 public function index() 13 { 14 $user = User::find(2); 15 $res = $this->dispatch(new SendEmail($user)); 16 dd($res); 17 } 18 19 }
1 Route::post(‘messageindex‘, [‘uses‘ => $namespaces . ‘MessageController@index‘, ‘as‘ => ‘messageIndex‘]);
使用postman发送post请求即可以测试发送邮件队列

查看redis是否有队列数据

查看邮箱发件箱,邮件已发出

推荐安装Supervisor,将 php artisan queue:work —queue sendEmailCode 等一系列队列进程,添加到进程保护中,防止中途崩溃时候,可以自救,哈哈~??
关于Supervisor,可以参考《centos安装Supervisor以及简单配置(添加进程守护)》
原文:https://www.cnblogs.com/clubs/p/11727862.html