laravel 之邮件
2018-05-14 本文已影响3人
空气KQ
就使用默认的smtp作为驱动,其他的都要收费啊,要不起
配置帐号
config/mail.php
所以配置都可以通过.env来设置
这里我用了腾讯的企业邮箱
.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.exmail.qq.com
MAIL_PORT=25
MAIL_USERNAME=email@kong-qi.com
MAIL_PASSWORD=YYYYyyyyxxxxxx
MAIL_ENCRYPTION=null
发送邮件
use Mail;
public function sendEmailReminder(Request $request, $id)
{
$user = User::findOrFail($id);
Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) {
//来源地址,来源名字,
$m->from('hello@app.com', 'Your Application');
// 发送给谁的email和名字,后面是主题
$m->to($user->email, $user->name)->subject('Your Reminder!');
});
}
//第一个参数是视图,第二个是传值,第三个匿名闭包回调设置,
纯文本邮件
意思是将你的源码发送出去
image.png
Mail::send(['text' => 'email'], $data, function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
});
原生字符串邮件
Mail::raw('你的验证码是6700', function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
});
附件
Mail::send('email', $data, function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
$message->attach($pathToFile);//这里
});
视图中使用图片
Laravel自动在所有邮件视图中传入$message变量使其有效
<body>
Here is an image:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>
嵌入原生数据
<body>
Here is an image from raw data:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>
邮件队列
默认队列是同步的,这个没有卵用,队列肯定是异步执行嘛
修改队列配置
config/queue.php
这里我设置为redis
.env
QUEUE_DRIVER=redis
Mail::queue('email', $data, function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
});
延迟消息队列
单位秒
Mail::later(5,'email', $data, function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
});
推入指定队列
可以使用queueOn和laterOn方法:
Mail::queueOn('queue-name','email', $data, function ($message) {
$message->from('email@kong-qi.com', 'Larave2l');
$message->to('531833998@qq.com','kongqi')->subject('dd');
});
事件
会发送邮件前触发一个事件,记住,这个事件是在邮件被发送时触发,而不是推送到队列时
'Illuminate\Mail\Events\MessageSending' => [
'App\Listeners\LogSentMessage',
],