[WordPress][架站] 08. 透過設定SMTP來利用Gmail寄送Email(包含微軟Outlook, Hotmail 替代方案)
透過WP Mail SMTP設定來解決在Contact Form 7於WordPress裡無法收發郵件的問題。
此文章也有影片介紹,可以搭配影片一起學習!
01. SMTP 安裝與測試, 解決MAMP無法送信的問題 (所屬課程)
在上一篇文章:[WordPress][架站] 07. WordPress外掛 - Contact Form 7 (聯絡表單)我們發現如果透過MAMP架站,因其內部的PHP的mail()函數在系統層面上串連並不完全,而造成無法收發郵件的狀況出現。
(如果你是透過WebHosting服務架設網站,比如Bluehost, Hostgater, Go Daddy之類的,就不太會有無法收發郵件的狀況出現)。
所以我們可以安裝設定SMTP的插件,將本來透過伺服器的mail()函數來發收郵件的設定改成透過WordPress後台的SMTP的設定來收發郵件。
(Mac OS 以套件的方法一樣無法寄送,必須另外改系統設定,在文章最後面有補充,或影片16:20以後。)
今天要介紹的是透過WordPress另一個外掛功能之一『WP Mail SMTP by WPForms』的設定來解決在Contact Form 7於WordPress裡無法收發郵件的問題。
雖然筆者這些年照著以下方式做都還是可以成功,但是老實講Gmail的失敗率很高,因為它們並不推廣SMTP的方式,而且如果你是用商業方案G Suite的話,已經確定在2020/02/15 停用安全性較低的應用(LSA)的方式,所以以下SMTP方式就不適用,一定要用OAuth 2的方式。
但是OAuth2 的技術本身對於本地端(localhost 或 127.0.0.1 )是不支援的,因為需要雙向訪問,本地端一般沒特別設定無法被訪問,所以使用MAMP開發時還是用SMTP比較理想。
因此可以參考上面的微軟outlook影片,使用outlook信箱完成開發環境,畢竟開發用的Email信箱沒有必要跟真實的信箱一樣,能寄送即可。
**現在註冊完 outlook 以後要先登入,登入後左邊有六個事情要完成,外觀, 匯入通訊錄...等, 六個都做完才叫設定完畢,不過例如通訊錄不用真的匯入, 就是要六個項目都點擊到消失後顯示設定完成,才能發送 smtp.
Step 1. 安裝外掛功能『WP Mail SMTP by WPForms』
首先,登入網站後台,點選控制台底下的「外掛」子項目「安裝外掛」,於關鍵字搜尋框中輸入『WP-Mail-SMTP』字樣,搜尋到『WP Mail SMTP by WPForms』這個外掛功能,按下「立即安裝」。
安裝完成後,再按下「啟用」,接著就會進入「設定」底下的「Email」的設定頁面裡,該頁面也可以在「外掛」底下的「已安裝外掛」裡的外掛列表中找到『WP Mail SMTP by WPForms』按「Settings」進去。
Step 2. SMTP設定
接下來這個步驟是要透過設定SMTP的插件,將本來透過伺服器的mail()函數來發收郵件的設定改成透過WordPress後台的SMTP的設定來收發郵件。
寄件者電子郵件 : 你想用來發送的郵件地址 (這不能亂填,一定要你擁有的帳號)
寄件者名稱: 你想顯示的名稱 (想詐騙的話就寫某A大廠的客服之類的!?)
郵件程式: 點選『其他 SMTP.』(這項設定是說透過SMTP來發送所有 WordPress的郵件)。選完以後就會顯示之後的內容。
回傳路徑: 可不用勾選(這裡是設定郵件返回的路徑與這裡這定的From Email匹配)。
這邊即使你使用的是Gmail的信箱,只要你是在MAMP或是本機端localhost,都無法使用Gmail按鈕的那種設定方式。Gmail為了安全,目前是推薦使用OAuth的驗證方式取代SMTP。但是OAuth有個限制就是必須要讓Gmail回傳Token給你,也就是他會嘗試訪問你的網站。如果你的網站是在他無法訪問到的地方,那你就無法拿到Token,也就無法傳Email。
所以如果是正式的站台,可以嘗試用Gmail OAuth2的方式。但如果是本地端的話,請還是使用SMTP的方式。
下一個階段就是設定SMTP
(本示範文以Gmail為例,如不是使用Gmail,請自行查詢主機的SMTP)
注意:Gmail的SMTP限制解除異常麻煩,如果照著下面做怎樣也不行的話,請用Outlook嘗試看看,此文章最上面有影片範例。
SMTP Host : smtp.gmail.com
加密方式: 點選 TSL encryption. (使用安全性憑證加密),如果過不了也可以選擇無,只是比較不安全。
SMTP Port : 587 (這裡是輸入的是Gmail的port號,其他服務提供商所需設定的數字可能不同)
按證 : 啟用
SMTP 使用者帳號 | 密碼 : 輸入你的Gmail帳號和密碼
接著按下方的「儲存變更」鈕來儲存這個階段的設定。
Step 3. Send a Test Email
上方設定都完成並儲存生效後,在上方會有個「電子郵件測試」測試選項,輸入你的要收到信的Email帳號後,點擊「傳送電子郵件」鈕來進行測試。
郵件收發測試失敗原因
[以下為舊版錯誤顯示,新版同樣的問題也會無法發送,以下有解決方案]
Test Message Sent
The result was:
bool(false)
布林值為false,告訴你該郵件發送失敗。
有兩種常見的錯誤方式
1. 如果出現的是 smtp Constants: No ErrorInfo: SMTP connect() failed. 並且配上 php_network_getaddresses
代表的是根本連不到google的stmp.gmail.com,無法轉回ip。
可能原因
a. 防毒軟體或防火牆擋住了,如果你有防毒或防火牆可以先暫停或「讓特定程式通過」,多半發生在MAMP Local端。
b. 主機時間不對,主機時間不對會造成SSL上的問題,多半發生在虛擬機器上面。
c. DNS解析錯誤,這個比較罕見,但是可以嘗試改變DNS設定,使用Google提供的8.8.8.8,設定方式這邊就不多說了。
2. 如果出現的是 ErrorInfo: SMTP Error: Could not authenticate.
發送失敗的原因是因為Google對於部分的應用程式和裝置認定為安全性較低且可能會有安全漏洞的問題,所以會把所有不是透過Gmail網頁操作收發郵件的需求全部都先擋下來。
解決方案
第一步、登入Gmail信箱,確認是否有收到Google發的主旨為「查看遭拒登入嘗試」的警告信。
點擊警告信內容中的『啟用低安全性應用程式的存取權限』,將[允許安全性較低的應用程式]設定處於停用狀態改為[允許安全性較低的應用程式] 設定處於啟用狀態。
如果找不到可以進入 https://myaccount.google.com/lesssecureapps
修改完後Gmail系統會再發一封警告信,確認該帳戶是否「已啟用安全性較低的應用程式存取權」。
第二步、進到DisplayUnlockCaptcha
如下圖 按continue
點擊後帳號就可以被訪問
第三步(不一定會發生),有時候 [允許安全性較低的應用程式] 會自動又變回“不啟用”狀態。如果一直是不出來記得回到https://myaccount.google.com/lesssecureapps 再啟用一次。
另外這一些動作都要在【同一個帳號】底下進行。他的即時性不是很高,常常開開關關不知道為何就通了。
以上2個解決方案的步驟完成之後再做一次Step 3. Send a Test Email 郵件發送測試的步驟。
郵件發送測試後的結果顯示成功訊息如下 :
Test Message Sent
The result was:
bool(true)
布林值為true,告訴你該郵件發送成功。
接著你會在Gmail裡收到從WP Mail SMTP發過來的信。
表示使用Gmail當SMTP於Wordpress發送郵件設定成功。
如果郵件發送沒有成功,請再檢查上述設定有沒有打錯或Google帳號是否正確。
以Gmail這類免費信箱當SMTP的缺點
1.以Gmail來說,如有單一電子郵件的收件者超過500人或單日傳送郵件超過上限500封的限制,
對於這類有大量傳送郵件需求者,Gmail系統就會發送「您已達到郵件傳送數量上限」等警告訊息。
2.對於部份會封鎖Gmail的國家,想當然爾也就無法透過聯絡表單正常使用Gmail伺服器寄送郵件,
這時可能就要另尋其它解決方法,如翻牆程式之類的。
3.信件常會被Gmail誤判為垃圾信件,所以網站管理員要常常去確認垃圾郵件匣,以免有遺漏信件情況。
如果你是MAC 用戶,必須使用終端機進入系統檔 /etc/postfix/main.cf 修改,
因為是系統檔,所以記得用sudo,如果上面的關鍵字你都看不懂,請參照影片16:20以後說明。
進入main.cf後,我們要在最後面加入
relayhost = [smtp.gmail.com]:587
# Enable SASL authentication in the Postfix SMTP client.
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
然後重新執行postfix,先關掉再開啟
1. $ sudo postfix stop <=== 關掉
2. $ sudo postfix start <=== 開啟
最後回到WordPress SMTP Options 設定,改成 TLS encryption (加密),我們改的系統檔就是在設定TLS,這樣就可以送信出去了!
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!