thinkphp5中使用phpmailer實現發送郵件功能(轉載)

1、開啓SMTP服務(使用php發送郵件須要用到SMTP服務,這裏以163郵箱的SMTP服務爲例)。

1.登陸163郵箱,在首頁上找到「設置」。php

 

2.選擇開啓的服務,通常都全選,POP3/SMTP/IMAP,開啓SMTP服務就得先開通客戶受權碼。html

3.點擊開通客戶受權碼,選擇開啓thinkphp

 

 

4.須要手機驗證碼,須要綁定手機號。瀏覽器

5.SMTP服務須要輸入客戶端受權密碼,這個密碼就是是你在第三方客戶端上的郵箱登陸密碼(在後面使用phpmailer發送郵件時會用到),若是在第三方客戶端上輸入以前的郵箱登陸密碼就會出錯。php框架

6.設置完客戶端受權密碼後就成功開通了SMTP服務服務器

 

2、首先下載phpmailer壓縮包。app

phpmailer的下載地址PHPMailer。解壓以後,裏面的許多文件都沒有用到,而後再thinkphp5的項目中的extend目錄下新建一個phpmailer文件夾,而後把class.phpmailer.PHP和class.smtp.php文件複製到phpmailer目錄下。框架

3、phpmailer的代碼實現thinkphp5

一、使用phpmailer時,須要用到php的openssl擴展,在php.ini中開啓。oop

2.首先注意,thinkphp5中的extend下的擴展類庫使用的是命名空間必須在class.phpmailer.php和class.smtp.php最開頭加上

 

[php]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. namespace phpmaier;  

以下圖:

 



三、在class.phpmailer.php中的2315行使用到了php的Exception異常類,在thinkphp框架中直接繼承,thinkphp找不到Exception因此要修改以下;

四、在使用phpmailer時,實例化PHPMailer(),須要使用命名空間。

這裏有一個問題,thinkphp5的擴展類的定義是,類文件命名爲:phpmailer.php而不是class.phpmailer.php。因此要把class.phpmailer.php重命名爲phpmailer.php。

而後,在控制器中用use引入。

 

[php]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. use phpmailer\phpmailer;  

例如在index控制器中調用phpmailer:

 

 

[php]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. <?php   
  2.     namespace app\admin\controller;  
  3.     use think\Controller;  
  4.     use phpmailer\phpmailer;  
  5.     class Index extends Controller  
  6.     {  
  7.           
  8.         //發送郵箱驗證碼  
  9.         public function email()  
  10.         {  
  11.             $toemail = 'xxx@qq.com';//定義收件人的郵箱  
  12.   
  13.             $mail = new PHPMailer();  
  14.   
  15.             $mail->isSMTP();// 使用SMTP服務  
  16.             $mail->CharSet = "utf8";// 編碼格式爲utf8,不設置編碼的話,中文會出現亂碼  
  17.             $mail->Host = "smtp.163.com";// 發送方的SMTP服務器地址  
  18.             $mail->SMTPAuth = true;// 是否使用身份驗證  
  19.             $mail->Username = "xxx@163.com";</span><span style="color:#ff6666;">// 發送方的163郵箱用戶名,就是你申請163的SMTP服務使用的163郵箱</span><span style="color:#333333;">  
  20.             $mail->Password = "xxxxxx";</span><span style="color:#ff6666;">// 發送方的郵箱密碼,注意用163郵箱這裏填寫的是「客戶端受權密碼」而不是郵箱的登陸密碼!</span><span style="color:#333333;">  
  21.             $mail->SMTPSecure = "ssl";</span><span style="color:#ff6666;">// 使用ssl協議方式</span><span style="color:#333333;">  
  22.             $mail->Port = 994;// 163郵箱的ssl協議方式端口號是465/994  
  23.   
  24.             $mail->setFrom("xxx@163.com","Mailer");// 設置發件人信息,如郵件格式說明中的發件人,這裏會顯示爲Mailer(xxxx@163.com),Mailer是當作名字顯示  
  25.             $mail->addAddress($toemail,'Wang');// 設置收件人信息,如郵件格式說明中的收件人,這裏會顯示爲Liang(yyyy@163.com)  
  26.             $mail->addReplyTo("xxx@163.com","Reply");// 設置回覆人信息,指的是收件人收到郵件後,若是要回復,回覆郵件將發送到的郵箱地址  
  27.             //$mail->addCC("xxx@163.com");// 設置郵件抄送人,能夠只寫地址,上述的設置也能夠只寫地址(這我的也能收到郵件)  
  28.             //$mail->addBCC("xxx@163.com");// 設置祕密抄送人(這我的也能收到郵件)  
  29.             //$mail->addAttachment("bug0.jpg");// 添加附件  
  30.   
  31.   
  32.             $mail->Subject = "這是一個測試郵件";// 郵件標題  
  33.             $mail->Body = "郵件內容是 <b>您的驗證碼是:123456</b>,哈哈哈!";// 郵件正文  
  34.             //$mail->AltBody = "This is the plain text純文本";// 這個是設置純文本方式顯示的正文內容,若是不支持Html方式,就會用到這個,基本無用  
  35.   
  36.             if(!$mail->send()){// 發送郵件  
  37.                 echo "Message could not be sent.";  
  38.                 echo "Mailer Error: ".$mail->ErrorInfo;// 輸出錯誤信息  
  39.             }else{  
  40.                 echo '發送成功';  
  41.             }  
  42.         }  
  43.     }  
  44.  ?>  


4、常見的錯誤處理

 

一、瀏覽器出現以下,說明php中沒有開啓openssl擴展(去掉php.ini中extension=php_openssl.dll前面的分號(;),記得重啓Apache服務)Windows下有時可能會開啓不了服務,能夠用Windows的服務開啓:

SMTP Error: Could not connect to SMTP host. Message could not be sent.Mailer Error: SMTP Error: Could not connect to SMTP host.
二、瀏覽器中出現以下,說明phpmailer類庫中沒有沒有寫命名空間(namespace phpmailer;)

三、瀏覽器中出現以下,說明class.smtp.php類庫中沒有沒有寫命名空間(namespace phpmailer;)


四、瀏覽器中出現以下,說明在控制器中沒有用use(use phpmailer\phpmailer;)引入:

五、瀏覽器中出現以下,說明thinkphp框架找不到Exception異常類:在Exception前面加上反斜槓"\"(參考上文)

 

轉載地址:http://blog.csdn.net/Iloveyougirls/article/details/52710284

如需轉載請註明出處,http://www.javashuo.com/article/p-fbrnrntp-d.html

相關文章
相關標籤/搜索