您现在的位置是:网站首页 > 心得笔记
laravel框架中发送邮件
简介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,就可以来测试我们邮件是否发送成功了!