laravel框架的邮件发送 | laravel china 社区-380玩彩网官网入口

laravel版本:7.0
基于 laravel framework 5.5.45,使用自带的smtp协议提供驱动。

laravel支持多种邮件驱动方式,包括smtpmailgunmaildrillamazon sesmailsendmailmailgunamazon ses都是收费的,maildrill目前不支持中国区用户,这三个都是第三方邮件服务。mail驱动使用php提供的mail函数发送,sendmail驱动通过sendmail/postfix(linux)提供的命令发送邮件,smtp驱动通过支持esmtpsmtp发送邮件。

就目前状况来看,使用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 方法中完成,在这个方法中,你可以调用多个方法,例如 fromsubjectview, 和 attach 来配置邮件的内容和发送

  • 使用 from 方法

    两个参数:第一个参数为要发送人的邮箱,第二个参数为要发送人的名称,如图(图1):
    图1:

    laravel框架的邮件发送

  • 使用 subject 方法

    设置发送邮件的主题,详细使用请参考上图(图1)

配置视图


可以在可邮寄类的 build 方法中使用 view 方法来指定渲染邮件内容时使用哪个视图模板,由于每封邮件通常使用 blade 模板来渲染内容,所以你可以在构建邮件 html 时使用 blade 模板引擎提供的所有功能,详细使用请参考上图(图1)

可以创建一个 resources/views/emails 目录来存放所有邮件模板,当然,你也可以将邮件模板放到 resources/views 目录下任意其它位置。我们这里是在resources/views/emails 目录下创建了testblade模板文件,如下图:

laravel框架的邮件发送

<!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作为公共属性,如下图:

    laravel框架的邮件发送

要发送邮件,使用 mail facadeto 方法。 to 方法接受一个邮件地址,一个 user 实现或一个 users 集合。如果传递一个对象或集合,mailer 将自动使用 emailname 属性来设置邮件收件人,所以确保你的对象里有这些属性。一旦指定收件人,你可以传递一个实现到 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框架的邮件发送

  • 将邮件消息加入队列

    由于发送邮件消息可能大幅度延长应用的响应时间,许多开发者选择将邮件消息加入队列放在后台发送。laravel 使用内置的 统一队列 api 简化了这一工作。若要将邮件消息加入队列,可以在指定消息的接收者后,使用 mail facadequeue 方法

    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 协议》,转载必须注明作者和本文链接
emin
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
以构建论坛项目 larabbs 为线索,展开对 laravel 框架的全面学习。应用程序架构思路贴近 laravel 框架的设计哲学。
讨论数量: 1

优秀

5小时前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图