1. 程式人生 > >thinkphp5中使用phpmailer實現傳送郵件功能 及自己遇到的坑

thinkphp5中使用phpmailer實現傳送郵件功能 及自己遇到的坑

一、開啟SMTP服務(使用php傳送郵件需要用到SMTP服務,這裡以163郵箱的SMTP服務為例)。

1.登入163郵箱,在首頁上找到“設定”。


2.選擇開啟的服務,一般都全選,POP3/SMTP/IMAP,開啟SMTP服務就得先開通客戶授權碼。


3.點選開通客戶授權碼,選擇開啟


4.需要手機驗證碼,需要繫結手機號。


5.SMTP服務需要輸入客戶端授權密碼,這個密碼就是是你在第三方客戶端上的郵箱登入密碼(在後面使用phpmailer傳送郵件時會用到),如果在第三方客戶端上輸入之前的郵箱登入密碼就會出錯。


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


二、首先下載phpmailer壓縮包。

phpmailer的下載地址PHPMailer解壓之後,裡面的許多檔案都沒有用到,然後再thinkphp5的專案中的extend目錄下新建一個phpmailer資料夾,然後把class.phpmailer.php和class.smtp.php檔案複製到phpmailer目錄下。

三、phpmailer的程式碼實現

1、使用phpmailer時,需要用到php的openssl擴充套件,在php.ini中開啟。

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

  1. namespace phpmaier;  
如下圖:



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


4、在使用phpmailer時,例項化PHPMailer(),需要使用名稱空間。

這裡有一個問題,thinkphp5的擴充套件類的定義是,類檔案命名為:phpmailer.php而不是class.phpmailer.php。所以要把class.phpmailer.php重新命名為Phpmailer.php

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

  1. use phpmailer\phpmailer;  
例如在index控制器中呼叫phpmailer:
  1. <?php   
  2.     namespace app\admin\controller;  
  3.     use think\Controller;  
  4.     use phpmailer\phpmailer;  
  5.     class Index extends Controller  
  6.     {  
  7.         //傳送郵箱驗證碼
  8.         publicfunction email()  
  9.         {  
  10.             $toemail = '[email protected]';//定義收件人的郵箱
  11.             $mail = new PHPMailer();  
  12.             $mail->isSMTP();// 使用SMTP服務
  13.             $mail->CharSet = "utf8";// 編碼格式為utf8,不設定編碼的話,中文會出現亂碼
  14.             $mail->Host = "smtp.163.com";// 傳送方的SMTP伺服器地址
  15.             $mail->SMTPAuth = true;// 是否使用身份驗證
  16.             $mail->Username = "[email protected]";</span><span style="color:#ff6666;">// 傳送方的163郵箱使用者名稱,就是你申請163的SMTP服務使用的163郵箱</span><span style="color:#333333;">
  17.             $mail->Password = "xxxxxx";</span><span style="color:#ff6666;">// 傳送方的郵箱密碼,注意用163郵箱這裡填寫的是“客戶端授權密碼”而不是郵箱的登入密碼!</span><span style="color:#333333;">
  18.             $mail->SMTPSecure = "ssl";</span><span style="color:#ff6666;">// 使用ssl協議方式</span><span style="color:#333333;">
  19.             $mail->Port = 994;// 163郵箱的ssl協議方式埠號是465/994
  20.             $mail->setFrom("[email protected]","Mailer");// 設定發件人資訊,如郵件格式說明中的發件人,這裡會顯示為Mailer([email protected]),Mailer是當做名字顯示
  21.             $mail->addAddress($toemail,'Wang');// 設定收件人資訊,如郵件格式說明中的收件人,這裡會顯示為Liang([email protected])
  22.             $mail->addReplyTo("[email protected]","Reply");// 設定回覆人資訊,指的是收件人收到郵件後,如果要回復,回覆郵件將傳送到的郵箱地址
  23.             //$mail->addCC("[email protected]");// 設定郵件抄送人,可以只寫地址,上述的設定也可以只寫地址(這個人也能收到郵件)
  24.             //$mail->addBCC("[email protected]");// 設定祕密抄送人(這個人也能收到郵件)
  25.             //$mail->addAttachment("bug0.jpg");// 新增附件
  26.             $mail->Subject = "這是一個測試郵件";// 郵件標題
  27.             $mail->Body = "郵件內容是 <b>您的驗證碼是:123456</b>,哈哈哈!";// 郵件正文
  28.             //$mail->AltBody = "This is the plain text純文字";// 這個是設定純文字方式顯示的正文內容,如果不支援Html方式,就會用到這個,基本無用
  29.             if(!$mail->send()){// 傳送郵件
  30.                 echo"Message could not be sent.";  
  31.                 echo"Mailer Error: ".$mail->ErrorInfo;// 輸出錯誤資訊
  32.             }else{  
  33.                 echo'傳送成功';  
  34.             }  
  35.         }  
  36.     }  
  37.  ?>  

四、常見的錯誤處理

1、瀏覽器出現如下,說明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.
2、瀏覽器中出現如下,說明phpmailer類庫中沒有沒有寫名稱空間(namespace phpmailer;)


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


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


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

-----------------------------------自己遇到的坑

將class.smtp.php改為Smtp.php  class.phpmailer.php改為Phpmailer.php後,

一直提示phpmailer\PHPMailer類找不到  上面的解決方法也都不行    最後將原始檔中的所有類名和use都改為檔名的方式  即將原來的SMTP類改為Smtp  PHPMailer改為Phpmailer  以及use phpmailer\Smtp    後竟然成功

相關推薦

thinkphp5使用phpmailer實現傳送郵件功能 自己遇到的

一、開啟SMTP服務(使用php傳送郵件需要用到SMTP服務,這裡以163郵箱的SMTP服務為例)。 1.登入163郵箱,在首頁上找到“設定”。 2.選擇開啟的服務,一般都全選,POP3/SMTP/IMAP,開啟SMTP服務就得先開通客戶授權碼。 3.點選

thinkphp5使用phpmailer實現傳送郵件功能

一、開啟SMTP服務(使用php傳送郵件需要用到SMTP服務,這裡以163郵箱的SMTP服務為例)。 1.登入163郵箱,在首頁上找到“設定”。 2.選擇開啟的服務,一般都全選,POP3/SMTP/IMAP,開啟SMTP服務就得先開通客戶授權碼。 3.點選開通客戶授權

JavaWeb使用JavaMail實現傳送郵件功能例項詳解

現在很多的網站都提供有使用者註冊功能, 通常我們註冊成功之後就會收到一封來自注冊網站的郵件。郵件裡面的內容可能包含了我們的註冊的使用者名稱和密碼以及一個啟用賬戶的超連結等資訊。今天我們也來實現一個這樣的功能,使用者註冊成功之後,就將使用者的註冊資訊以Email的形式傳送到使

node.js實現傳送郵件功能

準備事項 QQ郵箱設定:進入QQ郵箱->設定->賬戶->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務->開啟POP3/SMTP服務,並複製pass祕鑰 安裝nodemailer :npm install nodem

log4j實現傳送郵件功能

引言 最近預上線的一個機器人專案,因為這個專案中有很多的AI的東西,整個專案分為三部分組成,web工程——FS——NLU,整個web工程都是由我來負責,後面兩部分有大資料部門的東西負責,因為後面這兩部分對於我們貸後行業來說都是比較超前的,所以在整個連調的過程中會有很多的異常

實現傳送郵件功能

原文出自:www.hangge.com 轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_792.html 使用MessageUI.framework框架除了可以傳送簡訊,還能傳送Email,步驟如下: (

JAVA實現傳送郵件功能

/** * 傳送郵件功用方法 * @param mailTo * @param html * @param userName */ public void sendEmployeeCommon(String mailTo , String html , Stri

ThinkPHP5整合PHPMailer傳送郵件【附完整郵件驗證碼示例】

1. 目錄說明 www WEB部署目錄 ├─application 應用目錄 │ ├─common 公共模組目錄 │ │ └─controller 控制器目錄 │ │ └─S

Django實現傳送郵件功能

最近用python寫了官網的後臺。官網的後臺功能比較簡單,一個多語言支援,一個聯絡我們,即給公司發郵件的功能。多語言支援的方式寫在另一篇部落格了。這裡先來說一說Django的傳送郵件功能。 其實pyt

Flask實現傳送郵件功能

郵件服務用途較多,如:註冊時驗證使用者、找回密碼、線上程式出現重大bug時觸發郵件提醒以及伺服器關鍵資料(CPU、網路、記憶體)監控提醒等,可以說隨處可以用到,下面講解了一個使用flask_mail實現的郵件傳送功能,有完整程式碼,測試可行。首先下載依賴庫flask_mail

PHPMailer實現PHP郵件傳送

1.首先是下載PHPMailer http://code.google.com/a/apache-extras.org/p/phpmailer/ 2.解壓 從中取出class.phpmailer.php 和 class.smtp.php 放到你的專案的資料夾,因為我

C# 傳送郵件功能實現

郵件傳送功能在OA以及一些網站驗證中很常用。下面是郵件傳送的一個函式,引數傳入收件人地址,郵件主題,郵件內容,讀者可根據自己的需求新增郵件的附件或者抄送人等。  /// <summary> /// 傳送郵件 /// </su

SSM 框架整合 spring 傳送郵件功能實現

基於SSM的 spring 傳送郵件的實現 由於考慮到專案中需要,如果程式出現異常或其它問題,可以傳送郵件來及時提醒後臺維護人員處理。所以目前考慮使用JavaMail來實現郵件傳送!如下,是我整理的一些內容,做個筆記記錄下:(當然,在這功能實現之前,需要搭建好

ASP.NET自動傳送郵件功能實現

實現傳送郵件功能 首先說一下在.Net下如何傳送郵件。.Net已經為我們準備好了與傳送郵件相關的類,只要直接呼叫即可,非常方便。下面是我自己寫的一個郵件通知類: ///<summary> ///郵件通知服務類。 ///</summary> publi

Jenkins+maven+git 實現自動構建、許可權管理、靜態程式碼檢測、遠端部署、傳送郵件功能

Jenkins配置 1. 使用者許可權設定 配置->Configure Global Security (注:想讓匿名使用者可以瀏覽jenkins網站 需勾選Overall 中的read 和 Job

SpringBoot 傳送郵件功能實現

背景 有個小夥伴問我你以前發郵件功能怎麼弄的。然後我就給他找了個demo,正好在此也寫一下,分享給大家。 理清痛點 傳送郵件,大家可以想一下,坑的地方在哪? 我覺得是三個吧。 第一:郵件白名單問題。 第二:郵件超時問題。 第三:郵件帶附件問題。 我下面的demo都會介紹這些問題及解決。 實現方案 準備工作 我

linux系統搭建郵件服務,實現收發郵件功能

hat6 傳輸代理 windows vol 解決 tex proc 域名空間 named 搭建postfix郵件系統服務互聯網中的電子郵件系統並不是一個孤立的體系,需要DNS服務器提供郵件域的解析,郵件收取,傳遞等功能也是由不同的組件來提供的。郵件系統的角色MTA(郵件傳輸

Exchange13/16啟用垃圾郵件功能白名單設置

tar erb chang mtp mage 重啟 start enable 無法使用 1、 以管理員權限運行exchange的powershell 2 、啟用反垃圾郵件功能 X\:ExchangeInstallPath\Scripts\Install-AntiSpamAg

PHP 實現下載郵件功能,保存為eml格式

eml info html 功能 騰訊企業郵箱 toe 技術 處理 htm 引言:因為業務需求,需要獲取訂單的往來郵件,其中涉及到下載郵件功能。由於騰訊企業郵箱API接口不支持下載郵件功能,只能自己寫。 獲取郵件內容,保存到數據庫 步驟略:網上有很多現成的,利用ima

java實現傳送簡訊功能

1、在阿里雲簡訊服務中添加簽名 2、在阿里雲簡訊服務中新增模板 3、建立屬於自己的AccessKey ID和Access Key Secret 4、需要下載兩個jar包                   &nb