laravel框架的邮件发送 | laravel china 社区-大发黄金版app下载
laravel版本:7.0
基于 laravel framework 5.5.45,使用自带的smtp协议提供驱动。
laravel支持多种邮件驱动方式,包括smtp、mailgun、maildrill、amazon ses、mail和sendmail,mailgun和amazon ses都是收费的,maildrill目前不支持中国区用户,这三个都是第三方邮件服务。mail驱动使用php提供的mail函数发送,sendmail驱动通过sendmail/postfix(linux)提供的命令发送邮件,smtp驱动通过支持esmtp的smtp发送邮件。
就目前状况来看,使用smtp是最明智的选择,mail不安全,sendmail需要安装配置sendmail/postfix,其他要么付费要么不能用。
- 进入config/mail.php文件修改对应的参数配置
- 或进入.env文件修改mail_开头的几个参数值mail_driver=smtp mail_host= smtp.qiye.163.com mail_port= 端口号 // 25 mail_username= 邮箱地址 //xxx.com mail_password= 邮箱地址对应的授权密码(不是登录密码) mail_encryption=null mail_from_address=邮箱地址,这项需要和mail_username一模一样 mail_from_name=发件人名称ps:mail_encryption可以根据需要修改,但是如果不使用ssl,也需要修改mail_port为25端口 
输入指令php artisan make:mail ordershipped会在app/mail下生成一个邮寄类ordershipped
<?php
namespace app\mail;
use illuminate\bus\queueable;
use illuminate\contracts\queue\shouldqueue;
use illuminate\mail\mailable;
use illuminate\queue\serializesmodels;
class ordershipped extends mailable
{
    use queueable, serializesmodels;
    public $data;
    /**
     * create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }
    /**
     * build the message.
     *
     * @return $this
     */
    public function build()
    {
        $title = "来自".$this->data['user_name'].'的留言';
        return $this->from('xxx.com','xxx名称')
            ->subject($title)
            ->view('emails.test');
    }
}
所有的可邮寄类配置都在
build方法中完成,在这个方法中,你可以调用多个方法,例如from,subject,view, 和attach来配置邮件的内容和发送
- 使用 from 方法- 两个参数:第一个参数为要发送人的邮箱,第二个参数为要发送人的名称,如图(图1): 
 图1: 
- 使用 subject 方法- 设置发送邮件的主题,详细使用请参考上图(图1) 
配置视图
可以在可邮寄类的 build 方法中使用 view 方法来指定渲染邮件内容时使用哪个视图模板,由于每封邮件通常使用 blade 模板来渲染内容,所以你可以在构建邮件 html 时使用 blade 模板引擎提供的所有功能,详细使用请参考上图(图1)
可以创建一个
resources/views/emails目录来存放所有邮件模板,当然,你也可以将邮件模板放到resources/views目录下任意其它位置。我们这里是在resources/views/emails目录下创建了test的blade模板文件,如下图:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>document</title>
</head>
<body>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户的邮箱:{{$data['user_email']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户的名字:{{$data['user_name']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户的手机:{{$data['phone']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户的公司:{{$data['m_company']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户的城市:{{$data['city']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言用户公司的网址:{{$data['m_address']}}</div>
<div style='border-bottom: 1px solid #eee;margin: 10px 0;'>留言的内容:{{$data['m_content']}}</div>
</body>
</html>- 通过公共属性传参- 通常,我们需要传递一些数据到渲染邮件的 - html视图以供使用。有两种方式将数据传递到视图,首先,您的- mailable类中定义的任何公共属性将自动传递给视图。 因此,您可以将数据传递到- mailable类的构造函数,并将该数据设置为类的公共属性,我们这里使用的是- $data作为公共属性,如下图: 
要发送邮件,使用 mail facade 的 to 方法。 to 方法接受一个邮件地址,一个 user 实现或一个 users 集合。如果传递一个对象或集合,mailer 将自动使用 email 和 name 属性来设置邮件收件人,所以确保你的对象里有这些属性。一旦指定收件人,你可以传递一个实现到 mailable 类的 send 方法,如下图:
<?php
namespace app\http\controllers;
use app\order;
use app\mail\ordershipped;
use illuminate\http\request;
use illuminate\support\facades\mail;
use app\http\controllers\controller;
class ordercontroller extends controller
{
    /**
     * 发送给定的订单。
     *
     * @param  request  $request
     * @param  int  $orderid
     * @return response
     */
    public function ship(request $request, $orderid)
    {
        $order = order::findorfail($orderid);
        // 发送订单...
        // to方法也可只传一个要发送的邮箱
        mail::to($request->user())->send(new ordershipped($order));
    }
}
- 将邮件消息加入队列- 由于发送邮件消息可能大幅度延长应用的响应时间,许多开发者选择将邮件消息加入队列放在后台发送。 - laravel使用内置的 统一队列- api简化了这一工作。若要将邮件消息加入队列,可以在指定消息的接收者后,使用- mail facade的- queue方法- mail::to('[email protected]') ->cc($moreusers) ->bcc($evenmoreusers) ->queue(new ordershipped($order));- 此方法自动将作业推送到队列中以便消息在后台发送。使用此特性之前,需要 - 配置队列(如何配置消息队列,请参考博主的另一篇文章《》)
- 延迟消息队列- 想要延迟发送队列化的邮件消息,可以使用 - later方法。- later方法的第一个参数的第一个参数是标示消息何时发送的- datetime实例:- // 代表延迟10分钟后发送 $when = now()->addminutes(10); mail::to($request->user()) ->cc($moreusers) ->bcc($evenmoreusers) ->later($when, new ordershipped($order));
参考博客地址:
本作品采用《cc 协议》,转载必须注明作者和本文链接
 
 
推荐文章: