Linux日志
PHP记事本
JS记事本
数据库
团队资讯

laravel自定义辅助函数之:MailSend()

分类: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);
}


  

   编辑:郑祥景

[随享社区版权所有 未经许可不得转载 ]

返回首页


推荐
Linux日志
PHP记事本
JS记事本
数据库
团队资讯
在线客服随享宝宝
有任何问题,都可以戳我反馈哦!
微信公众号 方便 快速
扫描二维码 关注公众号

版权所有:天妖云/随享社区V5.2 beta Copyright 2015-2019 TIAYO.COM Inc. All rights reserved.