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