PHPMailer發信(高安全性模式 Oauth2)

之前一直說要填的坑,研究了好幾天才終於搞懂,不得不說有關的教學真的太少了(中英文都是),導致要湊出完整的流程真的挺困難的,先把觀念記錄下來,有機會再做成外掛方便大家使用 。
本篇文章參考:https://blog.hoyo.idv.tw/?p=3692撰寫
這已經是我找到相對來講最完整的教學了,也感謝這篇文章的作者讓我可以完成這部分的改寫。

 

  1. 確定 PHP 已經更新到 5.4 以上 (PHPMailer get_oauth_token.php 的需求)
  2. 下載 PHPMailer 5.2.23 (最新版)
  3. 將 PHPMailer 解壓縮在你的網站/外掛內
  4. 安裝 composer
  5. 到 PHPMailer 目錄執行 composer install
    順便先補兩個 composer require , league/oauth2-client 和 league/oauth2-google
    (這邊要注意調整資料夾權限否則無法安裝)
  6. 到 Google APIs 建立一個發信件用的專案
  7. 到「憑證」內產生「OAuth 2.0 用戶端 ID」 ,並且設定好「已授權的重新導向 URI」,請設定為你的get_oauth_token.php檔案的url
  8. 到 get_oauth_token.php 內設定好 $redirectUri(這支程式的網路位置 url) $clientId $clientSecret(google api內會給) 三個變數,並執行,會詢問帳號授權,選擇欲發信帳號後會出現 Token ,請複製起來
  9. 複製 examples/gmail_xoauth.phps 到 你要用來發信的程式 做測試
    (記得檔案要改成php)
  10. 修改  你要用來發信的程式
    oauthUserEmail (你要用來發信的gmail)
    oauthClientId  (google發信專案的 oauthClientId )
    oauthClientSecret  (google發信專案的 oauthClientSecret )
    oauthRefreshToken (詢問授權後獲得的 Token )
    ,以及寄信人、收信人後即可執行發信測試

發送mail的核心程式,如果上面測試有出現錯誤請檢查一下檔案內發信的程式碼

[php]$mail= new PHPMailer();                             //建立新物件
	$mail->setOAuth(
		new OAuth(
			[
				'provider' => $provider,
				'clientId' => $clientId,
				'clientSecret' => $clientSecret,
				'refreshToken' => $refreshToken,
				'userName' => $email,
			]
		)
	);
	$mail->SMTPDebug = 3; //如果需要顯示debug內容,測完確定沒問題請改成0
	$mail->SMTPAuth = true; //設定SMTP需要驗證
	$mail->SMTPSecure = 'tls';
	$mail->AuthType = 'XOAUTH2';
	$mail->Host = "smtp.gmail.com";  //Gamil的SMTP主機
	$mail->Port = 587;
	$mail->CharSet = "utf-8"; //郵件編碼
	$mail->From = "example@gmail.com"; //寄件者信箱
	$mail->FromName = "寄件測試"; //寄件者姓名
	$mail->Subject = $title; //郵件標題
	$mail->Body = $content; //郵件內容
	$mail->IsHTML(true);//郵件內容為html
	$mail->AddAddress($email);//收件者郵件及名稱
	$mail->Send();[/php]

如果有說明不夠清楚的地方歡迎留言反映我再做調整,感謝各位 。

發佈留言