Laravel 6/7/8.* Smtp发送邮件详解以及常见报错解决(支持163、QQ、Gmail 等)

Song2387 次浏览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中调用fromsubjectview, 和 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(...);来进行本地化。还可以使用ccbcc进行抄送,同时你还可以查看 邮件队列 进行队列发送。

好的这就是基本用法了,如果要更多操作查看文档即可。

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文

    当前暂无更多相关好文推荐...