Thinkphp5本身并没有实现发邮件的功能,至少据我所知。
本文利用网易邮箱作为发邮件的邮箱。作为发送邮件的前提是需要开启SMTP服务,打开网易邮件,点击设置按钮,如下图所示
勾选smtp服务
保存之后点击->客户端授权密码,我的已经开通
没有开通的按照步骤操作即可,然后下面是下载phpMailer,https://github.com/PHPMailer/PHPMailer/,这个地址;下载之后将其中的两个文件
拿出来,放到Thinkphp5的扩展目录下,扩展目录先创建一个叫mailer的文件,就放在这个下面,然后打开两个文件,给一个命名空间名字,我的是namespace mailer;
然后我再项目的common.php下,写了如下代码
1 <?php 2 // +---------------------------------------------------------------------- 3 // | ThinkPHP [ WE CAN DO IT JUST THINK ] 4 // +---------------------------------------------------------------------- 5 // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. 6 // +---------------------------------------------------------------------- 7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 8 // +---------------------------------------------------------------------- 9 // | Author: 流年 <liu21st@gmail.com> 10 // +---------------------------------------------------------------------- 11 12 // 应用公共文件 13 14 use mailer\PHPMailer; 15 use mailer\SMTP; 16 /* 17 * 应用公共函数文件,函数不能定义为public类型, 18 * 如果我们要使用我们定义的公共函数,直接在我们想用的地方直接调用函数即可。 19 * */ 20 // 公共发送邮件函数 21 function sendEmail($desc_content, $toemail, $desc_url){ 22 echo $desc_content; 23 echo $toemail; 24 $mail = new PHPMailer(); 25 $mail->isSMTP();// 使用SMTP服务 26 $mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码 27 $mail->Host = "smtp.163.com";// 发送方的SMTP服务器地址 28 $mail->SMTPAuth = true;// 是否使用身份验证 29 $mail->Username = "xxx@163.com";// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;"> 30 $mail->Password = "xxxx";// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码!</span><span style="color:#333333;"> 31 $mail->SMTPSecure = "ssl";// 使用ssl协议方式</span><span style="color:#333333;"> 32 $mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994 33 $mail->setFrom("xxx@163.com","Mailer");// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示 34 $mail->addAddress($toemail,'博客回复消息');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com) 35 $mail->addReplyTo("xxx@163.com","Reply");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址 36 //$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件) 37 //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件) 38 //$mail->addAttachment("bug0.jpg");// 添加附件 39 $mail->Subject = "邮件回复!";// 邮件标题 40 $mail->Body = "以下是博客博主回复你的内容:".$desc_content."点击可以查看文章地址:".$desc_url;// 邮件正文 41 //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用 42 43 if(!$mail->send()){// 发送邮件 44 echo 22; 45 return $mail->ErrorInfo; 46 // echo "Message could not be sent."; 47 // echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息 48 }else{ 49 return 1; 50 } 51 }
然后在控制器的方法下使用就可以了,因为在common.php下所以不需要引入模块,使用代码
1 /** 2 * 邮件发送 3 */ 4 public function sendEmail() 5 { 6 // 根据你的内用传入得到相关的参数,在调用我们方才的函数时,传递过去即可。 7 $res = sendEmail("222", "xxx@163.com", "url"); 8 // $res就是sendEmail()返回的值。我们根据返回的相应参数进行处理即可。 9 dump($res); 10 if ($res) { 11 echo 1; 12 }else{ 13 echo 0; 14 } 15 }
然后直接在浏览器走一下控制器下路由就可以啦啦啦,查看发送的邮件,发送成功。