1.首先将发送邮件的拓展包放到thinkphp框架的vendor目录下,拓展包在主页下载资源中,标题为“tp5和tp5.1发送邮件拓展包”
![](https://img-blog.csdnimg.cn/65b5eb867bec453d98bf0117b62bdcb4.png)
2.在框架公共方法文件中添加以下方法
/**
* [SendMail 邮件发送]
* @param [type] $address [description]
* @param [type] $title [description]
* @param [type] $message [description]
* @param [type] $from [description]
* @param [type] $fromname [description]
* @param [type] $smtp [description]
* @param [type] $username [description]
* @param [type] $password [description]
*/
function SendMail($address,$mail_code='123456')
{
include(Env::get("root_path").'/vendor/phpmailer/PHPMailerAutoload.php'); //tp5.1引用方法
// vendor('phpmailer.PHPMailerAutoload'); //tp5.0引用方法
$mail = new \PHPMailer();
// 设置PHPMailer使用SMTP服务器发送Email
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
// $mail->SMTPDebug = 1;
$mail->IsSMTP();
// 设置邮件的字符编码,若不指定,则为'UTF-8'
$mail->CharSet='UTF-8';
// 添加收件人地址,可以多次使用来添加多个收件人
$mail->AddAddress($address);
$data = \think\Db::name('emailconfig')->where('email','email')->find();
$title = $data['title'];
$message = $data['content'].$mail_code;
$from = $data['from_email'];
$fromname = $data['from_name'];
$smtp = $data['smtp'];
$username = $data['username'];
$password = $data['password'];
// 设置邮件正文
$mail->Body=$message;
// 设置邮件头的From字段。
$mail->From=$from;
// 设置发件人名字
$mail->FromName=$fromname;
// 设置邮件标题
$mail->Subject=$title;
// 设置SMTP服务器。
$mail->Host=$smtp;
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
$mail->Port = 465;
// 设置为"需要验证" ThinkPHP 的config方法读取配置文件
$mail->SMTPAuth=true;
//设置html发送格式
$mail->isHTML(true);
// 设置用户名和密码。
$mail->Username=$username;
$mail->Password=$password;
return($mail->Send());
}
3.在你的控制器中定义一个发送验证码的方法(以下是5.1的独立验证规则写法,5.0的独立验证规则自行查阅文档),发送成功后将的验证码储存到cookie中
//发送邮箱验证
public function send_mail(){
$data = $this -> request -> post();
//1.验证规则
$rule = [
'email|邮箱'=>'require|email',//必填,不能为空 | 邮箱格式
];
//2.添加字段的验证规则:初始化rule属性
Validate::rule($rule);
//3.数据效验
if(!Validate::check($data)){
$this->json([],Validate::getError(),201);
}
$mail_code = rand(000000,999999);
$mailto = SendMail($data['email'],$mail_code);
if(false == $mailto) {
$this->json([],'发送失败',201);
} else {
cookie('mail_code', $mail_code, 180);
$this->json([],'邮箱验证码发送成功,3分钟内有效',200);
}
}
4.获取cookie中的邮箱验证码进行自己的业务操作判断就可以了。