首先:QQ邮箱 --设置-- 账户
帐户一栏往下拉,找到如下红框一行,点击开启(如果不知道啥时候开启了就关了再开),开启时候会给一串秘钥:
第一步:laravel项目自带的有config/mail.php文件,打开修改(建议不要直接修改config卡里面东西,最好在env里面配置)
.env配置如下:
#MAIL
MAIL_DRIVER=smtp //写死
MAIL_HOST=smtp.qq.com //我用的发件人是qq邮箱,如果163邮箱的话把qq换成163
MAIL_PORT=465 //写死
MAIL_FROM_ADDRESS=545034502@qq.com //发件人邮箱地址跟MAIL_USERNAME配一样
MAIL_FROM_NAME=寻匠之美-机器人 //邮件来源名称
MAIL_USERNAME=545034502@qq.com //邮箱地址-相当于发件人
MAIL_PASSWORD='你自己的邮箱上面生成的SMTP秘钥(切记不是你邮箱密码哈)'
MAIL_ENCRYPTION=ssl //写死
上面MAIL的直接拷贝到 .env 文件里面(前面大写常量不用改,都是laravel自带的),改成你自己的配置信息就OK了。
上图看上面配置信息对面效果
代码逻辑
1.封装号服务,在需要的地方直接调用就行
说明:title就是对应上面效果图中的 本周数据统计结果
content是要发送的邮件内容,
email_arr是邮件接收者的邮箱数组
<?php
namespace App\Services;
use Illuminate\Support\Facades\Mail;
class SendEmailService
{
public static function send($type,$title,$content='',$email_arr){
switch ($type){
case 1: //发送纯文本内容
Mail::raw($content, function ($message,$email_arr,$title){
$emailArr = array_filter($email_arr); //去空值
foreach ($emailArr as $email){
// $email ? $message->to($email)->subject($title) : '';
// * 如果你已经设置过, mail.php中的from参数项,可以不用使用这个方法,直接发送
// $message->from("545034502@qq.com", "laravel学习测试");
$message->subject($title);
// 指定发送到哪个邮箱账号
$message->to($email);
}
});
break;
case 2://把内容渲染到html页面,然后发送邮件
$send = [
'email' =>$email_arr,
'title' =>$title,
];
Mail::send('emails.email',['send'=>$send], function ($message) use($send){
$emailArr = array_filter($send['email']); //去空值
foreach ($emailArr as $email){
// * 如果你已经设置过, mail.php中的from参数项,可以不用使用这个方法,直接发送
// $message->from("5450345020@qq.com", "laravel发送邮件测试");
$message->subject($send['title']);
// 指定发送到哪个邮箱账号
$message->to($email);
}
});
break;
default:
return [false,'类型有误!'];
break;
}
// 判断邮件是否发送失败
if(count(Mail::failures())) {
return [false,'邮件发送失败'];
}else{
return [true,'邮件发送成功'];
}
}
}
代码中我封装了2种邮件
①发送纯文本邮件很简单,看代码套用就行,不多说。
②因为是给领导推送运营数据,所以还是还看点为好,那就将内容渲染到html页面
那就找到如下路径创建跟我一样的页面文件,页面文件名和页面渲染的变量对应关系如下(html页面代码最后也可以公布出来)
页面里直接这样使用变量:
下面可以在要使用的地方调用了:
到此就一切OK了。
最后贴上最简单的表格页面代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
.table-main{
width: 100%;
height: auto;
display: flex;
flex-wrap: wrap;
border-left: solid 1px #000000;
}
.item{
width: 350px;
border-right: solid 1px #000000;
border-top: solid 1px #000000;
border-bottom: solid 1px #000000;
color: black;
font-size: 20px;
}
.title{
border-bottom: solid 1px #000000;
width: 100%;
height: 50px;
color: black;
font-size: 18px;
text-align: center;
line-height: 50px;
}
.content{
width: 100%;
height: 100px;
color: black;
font-size: 18px;
text-align: center;
line-height: 100px;
}
</style>
<body>
<div class="table-main">
<div class="item">
<div class="title">注册用户总数</div>
<div class="content">{{$send['content']['total_user_sum']}}</div>
</div>
<div class="item">
<div class="title">本周新增人数</div>
<div class="content">{{$send['content']['add_user_sum']}}</div>
</div>
<div class="item">
<div class="title">本周新增支付用户数</div>
<div class="content">{{$send['content']['add_pay_user_sum']}}</div>
</div>
<div class="item">
<div class="title">本周订单数量</div>
<div class="content">{{$send['content']['add_order_sum']}}</div>
</div>
<div class="item">
<div class="title">本周总订单流水(元)</div>
<div class="content">{{$send['content']['total_order_amount']}}</div>
</div>
</div>
</body>
</html>