分类:PHP记事本 发布时间:2017-09-20 10:07:07 阅读: 作者:郑祥景
laravel提供的邮件功能非常简便,但是使用起来还是有点麻烦,特别是在邮件使用场景很多的程序内,需要一个统一的调度方法,这里的MailSend()就是一种通用的调度方法:
一、新建通用邮件发送业务逻辑(可以放在控制器层也可以是业务逻辑层)
<?php namespace App\Services; use App\Mail\PublicShipped; use Carbon\Carbon; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Mail; class MailService { /** * 邮件发送调度方法 * * @param $user * @param $data */ static public function email($user, $data, $when) { //直接发送 if (empty($when)) { return Mail::to($user)->send(new PublicShipped($data)); } //延时发送 return Mail::to($user)->later($when, new PublicShipped($data)); } }
二、新建通用Mailable
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; class PublicShipped extends Mailable { use Queueable, SerializesModels; protected $data; public function __construct($data) { $this->data = $data; //数据验证(抛错) $this->validata($data); } /** * 邮件发送主体 * * @return $this */ public function build() { if (isset($this->data['attach']) && !empty($this->data['attach'])) { return $this->view('mails.'.$this->data['view'], $this->data['assign']) ->subject($this->data['subject']) ->attach($this->data['attach']); } return $this->view('mails.'.$this->data['view'], $this->data['assign']) ->subject($this->data['subject']); } /** * 数据验证及给默认值 * * @param $data * @throws \Exception */ public function validata($data) { if (!isset($data['view']) || empty($data['view'])) { throw new \Exception('必须输入模板!'); } if (!isset($data['subject']) || empty($data['subject'])) { $data['subject'] = null; } if (!isset($data['assign']) || empty($data['assign'])) { $data['assign'] = []; } if (!isset($data['attach']) || empty($data['attach'])) { $data['attach'] = null; } } }
三、新建辅助函数MailSend
if(!function_exists('MailSend')) { /** * 邮件发送方法 * 使用方法详见MailController的test方法 * * @param $user * @param $data */ function MailSend($user, $data, $when = null) { MailService::email($user, $data, $when); } }
四、发送一封带附件并且延时10秒的测试邮件:
/** * 测试邮件发送方法: * * 1、data->view : 模板存放到/resource/view/mails目录下,将目录赋值。 * 例如mails/test.blade.php则赋值test; * 例如mails/register/test.blade.php则赋值register.test * 2、data->subject : 邮件标题,不设置邮件标题会被系统设为默认值 * 3、data->assign : 往邮件模板中的变量传值(若模板中有变量未传值将导致错误,该邮件发送将无法成功!) * 4、data->attach : 附件 * */ static public function test() { $data = [ 'view' => 'test', 'subject' => '这是一封测试邮件', 'assign' => [ 'title' => '测试邮件' ], 'attach' => base_path().'/public/images/logo.png' ]; $when = Carbon::now()->addSecond(10); return MailSend(Auth::user(), $data, $when); }
编辑:郑祥景