PHPMailer發信(高安全性模式 Oauth2)
之前一直說要填的坑,研究了好幾天才終於搞懂,不得不說有關的教學真的太少了(中英文都是),導致要湊出完整的流程真的挺困難的,先把觀念記錄下來,有機會再做成外掛方便大家使用 。
本篇文章參考:https://blog.hoyo.idv.tw/?p=3692撰寫
這已經是我找到相對來講最完整的教學了,也感謝這篇文章的作者讓我可以完成這部分的改寫。
- 確定 PHP 已經更新到 5.4 以上 (PHPMailer get_oauth_token.php 的需求)
- 下載 PHPMailer 5.2.23 (最新版)
- 將 PHPMailer 解壓縮在你的網站/外掛內
- 安裝 composer
- 到 PHPMailer 目錄執行 composer install
順便先補兩個 composer require , league/oauth2-client 和 league/oauth2-google
(這邊要注意調整資料夾權限否則無法安裝) - 到 Google APIs 建立一個發信件用的專案
- 到「憑證」內產生「OAuth 2.0 用戶端 ID」 ,並且設定好「已授權的重新導向 URI」,請設定為你的get_oauth_token.php檔案的url
- 到 get_oauth_token.php 內設定好 $redirectUri(這支程式的網路位置 url) $clientId $clientSecret(google api內會給) 三個變數,並執行,會詢問帳號授權,選擇欲發信帳號後會出現 Token ,請複製起來
- 複製 examples/gmail_xoauth.phps 到 你要用來發信的程式 做測試
(記得檔案要改成php) - 修改 你要用來發信的程式內
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 = "[email protected]"; //寄件者信箱
$mail->FromName = "寄件測試"; //寄件者姓名
$mail->Subject = $title; //郵件標題
$mail->Body = $content; //郵件內容
$mail->IsHTML(true);//郵件內容為html
$mail->AddAddress($email);//收件者郵件及名稱
$mail->Send();[/php]
如果有說明不夠清楚的地方歡迎留言反映我再做調整,感謝各位 。