1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      Laravel5.0+框架邮件发送功能实现方法图文与实例详解

       更新时间£º2019年04月23日 09:49:11   作者£ºmoTzxx   我要评论

      这篇文章主要介绍了Laravel5.0+框架邮件发送功能实现方法,结合图文与实例形式详细分析了Laravel5.0+框架邮件发送相关原理¡¢配置¡¢实现方法及操作注意事项,需要的朋友可以参考下

      本文实例讲述了Laravel5.0+框架邮件发送功能实现方法¡£分享给大家供大家参考£¬具体如下£º

      I. 背景

      • 近期在接触传说中最优雅的 PHP 框架¡ª¡ªLaravel£¬学习了一下邮件发送功能£¬在此分享一下
      • 测试环?#24120;ºLaravel 5.2.45£¬Laravel 5.5
      • 使用协议£ºSMTP 邮件传输协议
      • 对于 ThinkPHP 框架框架的邮件发送可参考文章 ThinkPHP 框架下邮件发送功能

      II. 功能开发过程

      • 此处以 网易£¨163.com£©邮箱为例¡£

      一¡¢前期准备

      (1).首先对 SMTP 的知识稍作了解

      SMTP 简介 ¡¶百度百科¡·

      (2).开启邮箱 SMTP 服务

      • 以 163.com 邮箱为例£¬点击上方导航栏的¡°设置¡±£¬选择¡°POP3/SMTP/IMAP¡±进行下面的设置£¬着重记下服务器地址£¨SMTP 服务器£ºsmtp.163.com£©

      • 然后点击¡°客户端授权密码¡±进行权限设置£¬一般会进行短信的验证£¬并记录下自己设定的授权登录密码£¬后面的代码中需要用到¡£

      二¡¢代码实现

      (1).修改配置文件 mail.php

      • 文件位置位于 config/mail.php
      • 修改其中的 ¡°from¡± 信息£¬以本人为例£¬address 为发送方邮箱账号£¬name 为称谓
       'from' => ['address' => '[email protected]', 'name' => '逗比2号'],

      (2).修改配置文件 .env

      MAIL_DRIVER=smtp
      MAIL_HOST=smtp.163.com
      MAIL_PORT=25
      [email protected]
      MAIL_PASSWORD=xxxxx
      MAIL_ENCRYPTION=null
      
      
      • 注意配置信息的填写£ºMAIL_USERNAME£¬MAIL_PASSWORD 为前期准备中记下的163邮箱账号及客户端授权密码£¨非登录密码£©

      • MAIL_PORT 为默认端口号£¬如果配置 MAIL_ENCRYPTION = ssl 时£¬端口号需要更改为 465

      (3).补充路由信息

      Route::any('mail', '[email protected]');
      
      

      (4).控制器代码编写

      • 基本的代码编辑如下
      • 注意£¬本人发现网上的介绍有出入£¬有的是使用 Mail 类£¬推测应该是版本不同的原因£¬此处针对 5.2.45¡¢5.5 版本进行的测试
      • 附录 TestController.php 源代码以供参考
      <?php
      namespace App\Http\Controllers;
      use Illuminate\Mail\Mailer;
      
      class TestController extends Controller
      {
       private $mailer;
      
       public function __construct(Mailer $mailer)
       {
        $this->mailer = $mailer;
       }
       /**
        * 发送邮件
        */
       public function mail(){
        //测试数据
        $viewData = ['title' => '你若盛开£¬清风自来','author' => '木心'];
        $emailData = [
         'content' => '从前的日色变得慢 车 马 邮件 都慢',
         'subject' => '这是邮件主题£¬希望您能支持£¡',//邮件主题
         'addr' => '[email protected]',//邮件?#37038;?#22320;址
        ];
        $this->sendText($emailData);
        //$this->sendHtml('mail',$viewData,$emailData);
        //TODO $tag 判断发送是否成功£¬进行后续代码开发
        return view('mail',['title' => '你若盛开£¬清风自来','author' => '木心']);
       }
      
       /**
        * 发送纯文本 邮件
        * @param $emailData 邮件数据
        */
       public function sendText($emailData){
        //此处为文本内容
        $tag = $this->mailer
         ->raw($emailData['content'],
          function ($message)use ($emailData){
           $message->subject($emailData['subject']);
           $message->to($emailData['addr']);
          });
        return $tag;
       }
       /**
        * 发送自定义网页
        * @param $emailData 邮件数据
        * @param $viewPage html视图
        * @param $viewData html传输数据
        */
       public function sendHtml($viewPage,$viewData,$emailData){
        $tag = $this->mailer
         ->send($viewPage,$viewData,
          function ($message) use ($emailData){
           $message->subject($emailData['subject']);
           $message->to($emailData['addr']);
          });
        return $tag;
       }
      }
      

      三¡¢ 代码说明

      (1).方法 sendText()

      • 此方法为发送纯文本邮件的功能实现£¬调用此方法发送的邮件截图如下£º

      (2).方法 sendHtml()

      • 此方法为自定义格式邮件发送的功能实现
      • 实现的前提需要有设?#24179;?#38754;£¬代码中举例为我简单设计的 mail.blade.php 参考代码如下£º
      <html>
      <style>
       *{
        font-family: 楷体;
       }
      </style>
      <h2>{{$title}}</h2>
      ![]({{asset('uploads/20170902/59aa05723e35d.jpg')}})
      <pre>
        从前的日色
        变得慢
        车 马 邮件
         都慢
       一生只够爱一个人
          --{{$author}}
      </pre>
      </html>
      • 调用此方法发送的邮件截图如下£º

      III. 补充

      (1).另一种简单写法

      • 其实可提供一种更简单的写法£¬与上面所处理的 raw(),send() 方法类似£¬举例£º
      use Illuminate\Support\Facades\Mail;
      
      $tag = Mail::raw('你好£¬我们已经准备好了',function ($message){
         $message->to('[email protected]');
        });
      • 不过£¬测试发现会有如下报错£º

      FatalErrorException in ClassLoader.php line 373:Maximum function nesting level of '100' reached, aborting!

      • 但是前面的第一种代码方案£¬不会出现此问题£¬并且邮件发送响应快一些£¨或许错觉£©£¬然而£¬此代码如果放在队列中执行£¬测试发现不做任何修改也是可以实现¡­

      • 原因和解决方案£¬请参考文章 - PHP中的函数?#30701;?#23618;数限制

      (2).554 邮件发送报错

      • 有时邮件发送时£¬会有如下报错£¬例如 554 多表示邮件发送过多被系统禁止了£¬具体信息可通过提示信息中的网?#26041;?#34892;查询.

      开发测试中的报错信息 参考

      554 报错查询结果

      • 具体代码可自行优化£¬?#24418;?#39064;建议多多谷歌£¬还是能帮?#35762;?#23569;忙的.

      (3). post 请求500报错

      • 注意一点£ºlaravel框架默认要求表单提交时需要添加
      {{ csrf_field() }}

      附£ºPHP中的函数?#30701;?#23618;数限制

      访问PHP网站如下以下错误£º

       Fatal error: Maximum function nesting level of '100' reached, aborting!

      原因分析£º

      这个问题是由于你启用了xdebug£¬而xdebug默认设置了函数最大?#30701;?#25968;为100

      解决办法£º

      找到php.ini文件£¬找到xdebug
      在最后加上xdebug.max_nesting_level = 500 (这个数最好大于100即可)

      更多关于Laravel相关内容?#34892;?#36259;的读者可查看本站专题£º¡¶Laravel框架入门与进阶教程¡·¡¢¡¶php优秀开发框架总结¡·¡¢¡¶php面向对象程序设计入门教程¡·¡¢¡¶php+mysql数据库操作入门教程¡·及¡¶php常见数据库操作技巧汇总¡·

      希望本文所述?#28304;?#23478;基于Laravel框架的PHP程序设计有所帮助¡£

      相关文章

      最新评论

      常用在线小工具

      3dÊÔ»úºÅÖвÊÍø

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>