Laravel 6/7/8.* Smtp发送邮件详解以及常见报错解决(支持163、QQ、Gmail 等)
Song •
2490 次浏览 •
0个评论 •
2020年09月14日
在以前我们已经分享过了 Laravel5.* 使用Smtp发送邮件以及常见报错解决 但是最近开发使用laravel8.*
所以记录分享一下方便大家快速上手。这里只讲如何快速使用,配置您可以看上面那篇文章。
一、配置SMTP
我们以腾讯企业邮箱做案例,如果不使用SMTP服务器可以查看 Laravel 邮件驱动
MAIL_MAILER=smtp
MAIL_HOST=hwsmtp.exmail.qq.com
MAIL_PORT=465
MAIL_USERNAME=admin@phpartisan.cn
MAIL_PASSWORD=zi****30imP
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS="${MAIL_USERNAME}"
MAIL_FROM_NAME="${APP_NAME}"
因为我做海外所以使用了hwsmtp.exmail.qq.com
,如果你国内则 POP3/SMTP协议
1、发送测试邮件
发送一个测试邮件看一下配置是否正确。
Mail::raw('test mail', function ($m) {
$m->from('1@qq.com', 'User');
$m->to('71@qq.com')->subject('test email');
});
二、生成邮件类
执行php artisan
生成邮件类,邮件目录存储在app/Mail
中。
php artisan make:mail RegisterCode
生成结构如下
<?php
namespace App\Mail;
···
class RegisterCode extends Mailable
{
···
public function build()
{
}
}
我们在build
中调用from
,subject
,view
, 和 attach
来配置邮件的内容。
接下来我介绍一下每一个的用途:
- from:发送人,格式为
['address' => 'example@example.com', 'name' => 'App Name']
- subject:邮件标题
- view:视图,你可以在
resources/views/emails
下创建视图;视图可以定义邮件样式,排版。 - text:文本,如果您只发送文字,可以使用
text
代替view
。 - attach:添加附件,具体参考 附件
- with:和
blade
模版一样将数据传给视图。详细参考 with 方法
同时还支持Markdown 格式,具体看文档即可。如下为Demo
。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class RegisterCode extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($email)
{
$this->email = $email;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$code = rand(1000,9999);
return $this->from('admin@phpartisan.cn','Laravel学习网')->subject("验证码 CAPTCHA")->view('emails.register')->with([
'email' => $this->email,
'code' => $code,
'img' => "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png",
]);
}
}
然后在创建resources/views/emails/register.blade.php
并且写入如下代码:
<div style="font-size: 14px;font-weight: 300;color: #666666;float: left;margin-bottom: 15px;">您好!感谢您使用Laravel 学习网,您的账号( {{ mb_substr($email, 0, 5) }}*** )正在进行邮箱验证。验证码1小时有效,本次请求的验证码为:<font style="color: #FC6666;font-size: 20px;font-weight: 500;">{{ $code }}</font></div>
<div style="font-size: 14px;font-weight: 300;color: #666666;float: left;margin-bottom: 15px;">Hello! Thank you for using Phpartisan.cn . Your account number ( {{ mb_substr($email, 0, 5) }}*** ) is undergoing email verification. Please complete the verification within 1 hour. The verification code for this request is :<font style="color: #FC6666;font-size: 20px;font-weight: 500;">{{ $code }}</font></div>
<img src="{{ $img }}">
三、调用邮件类发送邮件
如上的代码我们在控制器中使用send
方法调用即可。控制器Demo
如下
<?php
namespace App\Http\Controllers;
...
use App\Mail\RegisterCode;
class IndexController extends Controller
{
public function test(Request $request)
{
# 收件人邮箱
$email = 'abc@qq.com';
Mail::to($email)->send(new RegisterCode($email));
}
您还可以使用Mail::to(...)->locale('en')->send(...);
来进行本地化。还可以使用cc
和bcc
进行抄送,同时你还可以查看 邮件队列 进行队列发送。
好的这就是基本用法了,如果要更多操作查看文档即可。
用户评论
当前暂无评价,快来发表您的观点吧...
更多相关好文
当前暂无更多相关好文推荐...
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
花生壳绑定ubuntu服务器? 2024-08-23
热门文章
-
花生壳绑定ubuntu服务器? 2024-08-23
-
Laravel模型更新全表如何实现? 2024-03-11
-
php图片转为二进制数据的方法 2023-10-23
-
Jquery如何监听动态创建元素的点击事件? 2023-09-08
-
所以SheetJS实现table导出数据为Excel 2023-09-05
提交评论