Thinkphp5的使用phpmailer實現發郵件功能(163郵箱)


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     }

然后直接在瀏覽器走一下控制器下路由就可以啦啦啦,查看發送的郵件,發送成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM