Laravel之邮件发送
  在 PHP 分类下   3 条评论

Laravel之邮件发送

  在 PHP 分类下   3 条评论

第三方mail类的使用

当我们使用laravel框架在做一些项目的时候难免会使用到给用户发邮件进行通知,比如

  1. 用户注册到网站需要点击链接完成验证
  2. 用户注册给用户通知一封友好的文件
  3. 数据更新以邮件形式通知

等等功能,由于laravel支持composer包并且支持psr-4自动加载的标准,相应的也有很多优秀的laravel爱好者去封装好类并上传到packagist.org,这样的话我们使用第三方类会更加的方便,那么在laravel中遇到这样的情况都会选择去使用第三方类去解决,所以呢下面我们来学习以下如何在laravel中使用第三方邮件发送的类,如:

首先,在项目中执行命令,创建好一个执行发送的命令

php artisan make:console Email --command=email

执行成功会在appConsoleCommands下多出一个Email.php
然后,在AppConsoleKernel.php中绑定命令 如:

/**
  * The Artisan commands provided by your application.
  *
  * @var array
  */
 protected $commands = [
     Commands\Inspire::class,
     Commands\Email::class,
 ];

然后就可以在命令行中执行 php artisan email
会直接执行Email.php文件中的handle方法,所以下面准备nette/mail类的使用,阅读packagist.org的用法;我直接在代码的handle方法体中的注释中呈现出来使用方法,如

<!--?php
  
 namespace App\Console\Commands;
  
 use Illuminate\Console\Command;
 use Nette\Mail\Message;//使用mail类的实例
 use Nette\Mail\SmtpMailer;//使用第三方服务器的实例
 class Email extends Command
 {
     /**
      * The name and signature of the console command.
      *
      * @var string
      */
     protected $signature = 'email';
  
     /**
      * The console command description.
      *
      * @var string
      */
     protected $description = 'Command description';
  
     /**
      * Create a new command instance.
      *
      * @return void
      */
     public function __construct()
     {
         parent::__construct();
     }
  
     /**
      * Execute the console command.
      *
      * @return mixed
      */
     public function handle()
     {
         $mail = new Message;
         $mail--->setFrom('MrChi <xxxx@163.com>')//设置自己邮箱,从哪发送
             ->addTo('xxxxxxx@qq.com')//接受者的邮箱
             ->setSubject('Laravel Mail User')//设置自己的主题
             ->setBody("Hello, Your order has been accepted.");//设置自己主题的内容
             //配置自己的服务器 这里以163为例
         $mailer = new SmtpMailer([
                 'host' => 'smtp.163.com',
                 'username' => 'xxxxx',//邮箱用户名
                 'password' => '*****',//邮箱客户端授权密码
         ]);
         $mailer->send($mail);  
     }
 }</xxxx@163.com>

执行成功,什么都不会返回,代表发送成功,这样的就是简单的第三方类的使用,人家帮你封装好了,自己负责去调用,所以使用起来方便简单,但是laravel本身自己也封装好的mail类,那么直接在laravel框架中去使用就ok,下面就看下laravel中mail类的使用,然后我们回头再对比,两种类的用法

laravel mail类的使用

相比于使用第三方email类,我们使用laravel自己封装的类会更加的方便并应用到我们的项目当中,那么下面我们就来了解一下如何在我们的自身项目中去使用laravel的mail类
Laravel 基于热门的 SwiftMailer 函数库提供了一套简洁的 API。Laravel 为 SMTP、Mailgun、Mandrill、Amazon SES、PHP 的 mail 函数及 sendmail 提供驱动,让你可以从本地或云端服务自由地发送邮件。
相应的laravel自带的mail类支持各种驱动,比如

下面呢,我们就是用stmp服务来完成我们的mail类发送的使用
首先,因为我们使用laravel的原生发送,所以我们在使用之前需要设置一些东西,比如:你的服务,邮箱,客户端授权等等,当然设置很简单,打开.env文件如:

MAIL_DRIVER=smtp
 MAIL_HOST=mailtrap.io//服务设置
 MAIL_PORT=2525//端口设置
 MAIL_USERNAME=null//邮箱授权用户名
 MAIL_PASSWORD=null//客户端授权密码
 MAIL_ENCRYPTION=null

然后我们还是以163邮箱为例,配置我们个人邮箱设置配置如何发送
在config/mail.php文件中设置

// 将如下这行
  'from' => ['address' => null, 'name' => null],
 // 修改成
  'from' => ['address' => env('MAIL_FROM'), 'name' => env('MAIL_NAME')],

然后在.env文件中设置

MAIL_DRIVER=smtp
 MAIL_HOST=smtp.163.com
 MAIL_PORT=25
 MAIL_USERNAME=buxuhunao
 MAIL_PASSWORD=******//客户端授权密码
 MAIL_FROM=buxuhunao@163.com
 MAIL_NAME=buxuhunao

配置成功,然后看下在laravel中mail类的使用实例

Laravel 允许你在 视图 中存放电子邮件消息。例如,要组织你的电子邮件,你可以在 resource/views 目录中创建 emails 目录:

要发送消息,使用 Mail facade 的 send 方法。send 方法接收三个参数。首先是包含邮件消息的 视图 名称。其次是一个要传递给该视图的数据数组。最后是一个用来接收消息实例的 闭包回调,让你可以自定义收件者、主题,以及邮件消息的其它部分:

因为laravel邮件发送是以模板文件发送,准备模板文件resource/views/emails/mail.blade.php

<meta charset="utf-8">
<title>Document</title>
<p></p><h1>Laravel Mail Sending</h1><p></p>\
<p>标题是:</p>
<ul>
    <li><strong>{{$title}}</strong></li>
</ul>
</meta charset="utf-8">

然后我们还是按照上述的artisan 命令去发送邮件,书写代码

use Mail;//引入实例
 class Email extends Command
 {
     /**
      * The name and signature of the console command.
      *
      * @var string
      */
     protected $signature = 'email';
  
     /**
      * The console command description.
      *
      * @var string
      */
     protected $description = 'Command description';
  
     /**
      * Create a new command instance.
      *
      * @return void
      */
     public function __construct()
     {
         parent::__construct();
     }
  
     /**
      * Execute the console command.
      *
      * @return mixed
      */
     public function handle()
     {
         Mail::send('emails.mail',['title'=>'Laravel Bool Test By 
             Mrchi!'],function($message){
                 $message->to('973714522@qq.com')
                 ->subject('Laravel Mail Test');
         }) ;
     } 
}

当我们执行php artisan email会直接执行handle方法里面的内容,那么我们来看一下handle方法中的参数代表的含义,我们使用 Mail::send 发送邮件,该方法第一个参数是邮件视图模板,第二个参数是传递到视图的变量数组,第三个参数是对消息进行额外处理的闭包,这里我们只是设置了收件人及邮件主题。
执行成功之后,我们会在你设置的接收邮箱中收到我们在模板中设置的样式,当然我们还可以根据mail类中的方法去设置自己想要的一些参数,想要设置更多可以阅读laravel文档就是这么的方便,如果使用laravel自己封装的类,那么我们就可以在任何场景更好的去引入实例直接调用send方法去使用,同样的我们使用完两种方法之后,来比较一下之间的区别

  1. 设置邮箱服务器 一个在代码中去设置,一个是在env文件中设置
  2. 在邮箱中设置模板的样式,一种是以字符窜的形式 后者使用自己设置好的模板样式
  3. 相比于前者,后者适用于各种驱动,可以更加方便的使用闭包来处理我们的数据
评论已关闭
  1. icon_cool.gif 好!!!