Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

时间:2022-09-24 16:37:58

Thinkphp5本身并没有实现发邮件的功能,至少据我所知。

本文利用网易邮箱作为发邮件的邮箱。作为发送邮件的前提是需要开启SMTP服务,打开网易邮件,点击设置按钮,如下图所示

Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

勾选smtp服务

Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

保存之后点击->客户端授权密码,我的已经开通

Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

没有开通的按照步骤操作即可,然后下面是下载phpMailer,https://github.com/PHPMailer/PHPMailer/,这个地址;下载之后将其中的两个文件

Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

拿出来,放到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     }

然后直接在浏览器走一下控制器下路由就可以啦啦啦,查看发送的邮件,发送成功。