您现在的位置是:网站首页 > 心得笔记

laravel框架中发送邮件

盛悦2018-12-15982人围观
简介laravel提供了一套简介的邮件API,可以让你快速从本地或云端服务自由地发送邮件。

现在大多数系统都有邮件发送功能,但有很多用户不会配置导致程序邮件相关的功能不能正常工作。由于主机不支持mail函数,网站要使用邮件发送功能就需要调用外部的smtp,同时邮箱自身也要开启smtp/pop功能才可以正常调用。常见第三方smtp如下:

针对各邮箱,如何打开POP3/SMTP/IMAP功能?

1、腾讯QQ邮箱(推荐)

为了保障用户邮箱的安全,QQ邮箱设置了POP3/SMTP/IMAP的开关。系统默认设置是[关闭],在用户需要这些功能时请[开启]。

首先,登录邮箱(发件用户的邮箱),进入设置-帐户

 

然后,在[帐户]设置中,找到设置项,进行设置,如下:

 

最后,保存设置,即打开了相应的服务。

 

注意腾讯邮箱要单独设置安全码 点击查看说明!!!

 

2、网易163邮箱:smtp.163.net smtp/pop3开启

网易邮箱已经默认开启POP3/SMTP/IMAP服务,方便您可以通过电脑客户端软件更好地收发邮件,如果关闭可以通过以下方式打开。

开启POP3/SMTP/IMAP服务方法:

登录163邮箱,点击页面右上角的设置,点“POP3/SMTP/IMAP”,勾选图中两个选项,点击确定。即可开启成功。开通后即可用闪电邮Outlook等软件收发邮件了。

 

最后,保存设置,即打开了相应的服务。

 

注意网易免费邮箱smtp密码要单独设置 点击查看说明!!!

 

开启了POP3/SMTP/IMAP后,可以使用laravel发送邮件了!

1、配置config/mail.php文件

 <?php
     return [
	'driver' => env('MAIL_DRIVER', 'smtp'),//邮件的驱动类型,默认采用smtp

	'host' =>  'smtp.qq.com',//邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com;使用QQ邮箱的话,对应值是smtp.qq.com;企业云邮箱默认 SMTP 发信功能已经开启,对应值是smtp.mxhichina.com

	'port' => 25,//配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465

	'from' => array('address' => '2516235373@qq.com', 'name' => 'TestMail'),//发送者的邮件地址:发件者的名称而已,任意

	'encryption' => 'tls',//表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls/ssl

	'username' => '2516235373@qq.com',//发信者的登陆名称

	'password' => 'gqysnqlvdvbydjbi',//授权码 各邮箱获取授权码操作步骤:https://blog.csdn.net/gysea123321/article/details/51943433   企业云邮箱默认 SMTP 发信功能已经开启,授权码就是登录邮箱的密码

	'sendmail' => '/usr/sbin/sendmail -bs',//在设置driver为sendmail时使用,用于指定sendmail命令路径

	'pretend' => false,//用于配置是否将邮件发送记录到日志中,默认为false则发送邮件不记录日志,如果为true的话只记录日志不发送邮件,这一配置在本地开发中调试时很有用。];

 

2、根据项目定义路由

Route::get('mail/send','MailController@send');

 

3、邮件发送逻辑实现

<?php 
  namespace App\Http\Controllers\Admin;

  use Illuminate\Support\Facades\Mail;//引用laravel中门面Mail

  class MailController extends CommonController
  {
    /**
     * 功能:邮件发送
     * @author Sheng yue
     * @time 2018.5.23
     */
    public function send()
    {
        $name = '学院君';
        //Mail::send需要传递三个参数,第一个是邮件视图,第二个是传入视图的数据,第三个是一个闭包,该闭包中定义了收件人、抄送人(如果有的话)、邮件主题、附件等信息。
        Mail::send('admin.tool.sendemail',['name'=>$name],function($message){
            $to = ['shengyue@omsedu.com','348032356@qq.com'];//发送给谁,发送给一个人一个字符串,发送给多个人 ,数组
            $message ->to($to)->subject('测试邮件');//邮件主题:测试邮件
            $attachment = base_path('/public/uploads/1.xls');//发送附件的路径
            //在邮件中上传附件
            $message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('测试文档')."?=.xls"]);//附件名称
        });
        if(count(Mail::failures()) < 1){
            echo '发送邮件成功,请查收!';
        }else{
            echo '发送邮件失败,请重试!';
        }
    }

  }

 

4、创建视图 (视图中内容,是邮件的文本内容)

{{$name}},这是一封测试邮件


 

至此,邮件发送功能就已经完成了,接下来我们访问http://www.yourname.com/mail/send,就可以来测试我们邮件是否发送成功了!