BBJ不败君

前端萌新&初级后端攻城狮

使用Laravel发送邮件

发表:2019-05-11 16:47:13

围观(183)

首先安装一个包:

composer require guzzlehttp/guzzle


修改根目录ENV文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=587
MAIL_USERNAME=邮箱地址
MAIL_PASSWORD=密钥
MAIL_ENCRYPTION=tls
#以下两个参数存放在config/mail 这是个坑 不修改放到ENV处理会导致鉴权失败
MAIL_FROM_ADDRESS=邮箱地址
MAIL_FROM_NAME=发送人名称


生成一个邮件类

php artisan make:mail OrderShipped

编写邮件类

class OrderShipped extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */

    //定义一个变量 用于存放传递过来的数组/参数
    public $data = [];

    public function __construct($data = null)
    {
        //构造方法 将传递过来的数据存入变量
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        
        return $this->view('test')->with([
            'content' => $this->data
        ])->subject($this->data['title']);
    }
}

build函数内视图为发送的HTML模板,with方法传递的数据则为模板变量,subject函数写入邮件标题

视图(test.blade.php)例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h3>the mail from {{ $content['name'] }}.</h3>
    <h4>content: {{ $content['content'] }}</h4>
</body>
</html>

然后写入一条路由 指向一个控制器,控制器内容:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Support\FacadesMail;
use App\Mail\OrderShipped;
//以上两个类必须引入

class MailController extends Controller
{

    public function send()
    {
        //定义一个需要传递的数组
        $data = [
            'name' => 'jun',
            'content' => 'test mail send' . rand(1, 999),
            'title'=> '测试邮件发送'. rand(1, 999)
        ];
        $res = Mail::to('需要发送的邮箱地址')->send(new OrderShipped($data));
        if($res == null){
            //此处返回值是null 如果发送不成功则会报错 应该有其他的判断方法,try或许可以更好处理
            return '发送成功';
        }else{
            return '发送失败';
        }
    }
}

多个发信账户

$backup = Mail::getSwiftMailer();
// 设置邮箱账号
$transport = \Swift_SmtpTransport::newInstance('smtp.qq.com', 587, 'tls');

$transport->setUsername('xxx@xxx.xxx');
$transport->setPassword('xxxxxx');

$mailer = new \Swift_Mailer($transport);

Mail::setSwiftMailer($mailer);

Mail::send('mail.template', array $data, function ($message) {
    $message->from('xxx@xxx.xxx', 'xxxxxx');
    $message->subject('邮件主题');
    $message->to('receiver@xxx.xxx');
});
Mail::setSwiftMailer($backup);

判断邮件是否发送成功

if(count(Mail::failures()) > 0){
    return '发送失败';
}else{
    return '发送成功';
}


本文地址 : www.bubaijun.com/page.php?id=123

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © BBJ不败君 粤ICP备18102917号-1