[WordPress 外掛] Post SMTP Mailer/Email Log 繁體中文本地化及使用方式 (以使用 Gmail API 為例)

Alex Lion
阿力獅的教室
Published in
10 min readJun 29, 2017

WordPress 本身具備發信功能,但是這功能不一定能正常運作,因為會受到主機商對你承租的主機所設下的限制影響。即使你的主機商並未設下諸多限制,但是你想透過更加精準設定網站的寄件機制、或是網站的表單功能無法正常寄送郵件時,你可以用相關的外掛來輔助,而 Post SMTP Mailer/Email Log 就是當中的佼佼者。

外掛用途說明

在開始介紹前,請各位要有一個基本概念,即使以現實生活來說,寄信與收信也是兩種行為,所以對電子郵件通訊協定來說也一樣。有了這個基本認知,我們來看看 Post SMTP 外掛能提供的郵件寄送功能有哪些。

請注意,之前本文介紹的 Postman SMTP 由於原開發者久不維護,導致程式碼所產生的漏洞沒有修補而遭到下架處分,而 Post SMTP 是熱心的志願開發者接續既有程式碼,修補程式碼漏洞並加強功能而建立的新版本外掛。

  • 在主機商阻擋外寄通訊協定所需埠號的狀況下,可以使用三種連線方式不同的 SMTP 通訊協定,與外部 SMTP 伺服器連線進行寄送郵件的工作。
  • 通訊埠 25: 未加密的 SMTP 連線。
  • 通訊埠 465: 使用 SSL 加密的 SMTP 連線。
  • 通訊埠 587: 使用 TLS 加密的 SMTP 連線。
  • 支援 SASL 機制。
  • 支援 SMTPS、STARTTL (SSL/TLS)。
  • 可透過通訊埠 443 使用 Gmail API、Mandrill API 以及 SendGrid API 寄送郵件。
  • 這三種郵件服務的 API,對於使用量都有限制。
  • Mandrill API 以及 SendGrid API 是付費服務。
  • Gmail API 是免費服務,即使僅使用免費額度,也比 Gmail 的一般使用方式的每日寄件配額來的高。
  • 依據 Post SMTP 的 [設定小幫手] 指示,填入指定資料即可完成設定。
  • 可測試你的主機與要使用的郵件伺服器間的連線狀況,讓你在選用郵件服務的連線方式時有所依據。
  • 可以在 Post SMTP 外掛先設定好額外的收件者、副本收件者與密件副本收件者,假如需要發信的其他外掛不具備這些設定,Post SMTP 可以補上。
  • 可匯出已設定完成的 Post SMTP 設定,之後需要可在全新設定時直接匯入[ref]例如更換主機、或是重設 Post SMTP 外掛設定後,都有機會用上匯出及匯入設定的功能。[/ref]。
  • 無論使用的是 Gmail 或 Gmail API,都可以透過 OAuth 2.0 進行驗證,驗證完畢後即使 Google 帳戶的的密碼有了變更,也不影響 Post SMTP 的使用。
  • 只要是使用 WordPress API 的 wp_mail 函數[ref]簡單說,幾個知名的表單外掛如 Contact Form 7、Gravity Forms 都能透過 Post SMTP 寄送郵件,連 Woocommerce 也沒問題。[/ref]寄送信件的外掛,Post SMTP 都能與之相容。

外掛使用方式

要為 Post SMTP 外掛進行寄送郵件的設定,阿力獅會建議你直接採用 [設定小幫手] 完成;透過 [設定小幫手] 的引導,只要填入它指定的資料,便能完成設定。以下阿力獅就以 Post SMTP 外掛使用 Gmail API 作為設定示範。

使用 [設定小幫手] 設定使用 Gmail API

  1. 在 WordPress 管理後台,指向 [設定],然後按一下 [Post SMTP]。
按一下 [Post SMTP]
  1. 在 Post SMTP 主畫面中,按一下 [設定小幫手]。
  • 請注意,接下來每個步驟設定完畢後,請記得按一下 [下一步],這點不再提醒。
  1. 在 [匯入設定] 頁面中選 [無],因為要使用 Gmail API 的話,就是全新設定。
要使用 Gmail API 的話,就是全新設定
  1. 在 [寄件者詳細資料] 頁面中設定要將哪個帳號設定為寄件者
在 [寄件者詳細資料] 頁面中設定要將哪個帳號設定為寄件者
  • 電子郵件地址: 輸入你要拿來寄送郵件的 Gmail 電子郵件地址。
  • 顯示名稱: 設定寄件者的顯示名稱。以阿力獅為例,我將這個欄位設定為「阿力獅 WP 示範站管理員」。
  1. 在 [外寄郵件伺服器主機名稱] 頁面中,Post SMTP 會依據你使用的電子郵件地址進行偵測,並自動填寫 [外寄郵件伺服器主機名稱][ref]阿力獅做過不少測試,只要使用的是知名的郵件服務,這項設定都無須你煩心。如果 Post SMTP 偵測不出來,請自己填寫。[/ref]。
Post SMTP 會依據你使用的電子郵件地址進行偵測,並自動填寫 [外寄郵件伺服器主機名稱]
  1. 在 [連線測試] 頁面中,Post SMTP 會偵測目前主機的郵件通訊協定可用通訊埠,然後給予建議。由於我們要使用 Gmail API,所以把它建議的連線方式改為 [Gmail API]。
要使用 Gmail API,必須把它建議的連線方式改為 [Gmail API]
  • Gmail API 只能使用 OAuth 2.0 方式進行驗證。
  1. 在 [驗證方式] 頁面中,先在新標籤頁連線至 Google API Console,並在建立 Gmail API 的過程中,填入本頁所提供的 [已授權的 JavaScript 來源] 和 [已授權的重新導向 URI] 這兩項資料,並將 Gmail API 所提供的 [用戶端 ID] 及 [用戶端密碼] 填回這個頁面。
將 Gmail API 所提供的 [用戶端 ID] 及 [用戶端密碼] 填回這個 [驗證方式] 頁面
  1. 在 [完成] 頁面中,按一下 [完成] 便能回到 Post SMTP 的主畫面。
在 [完成] 頁面中,按一下 [完成] 便能回到 Post SMTP 的主畫面
  1. 在 Post SMTP 的主畫面中,按一下 [要求 Google 授予權限]。
按一下 [要求 Google 授予權限]
  1. 選擇正確的授權帳戶,然後按一下 [允許]。
選擇正確的授權帳戶,然後按一下 [允許]
  1. Post SMTP 取得了 Gmail API 的授權後,就可以開始使用 Gmail API 寄送郵件。
Post SMTP 取得了 Gmail API 的授權後,就可以開始使用 Gmail API 寄送郵件

由於使用 Gmail API 的應用程式需要建立 Gmail API 的 Google 帳戶進行授權,所以在授權成功後,進行授權 Google 帳戶一定會收到一封來自 Google 系統的通知郵件。

進行授權 Google 帳戶一定會收到一封來自 Google 系統的通知郵件

不要連自己操作了些什麼都不知道,在那邊窮擔心。

學會為什麼要這樣操作的原因,操作之後會有什麼影響,比只學會操作方式來的重要許多,畢竟無論是 Post SMTP 或是申請 Gmail API 的介面都有可能會變更,但是背後的道理不會改。

傳送測試郵件

Post SMTP 設定成功不算什麼,要能成功寄送郵件才是真的。

  1. 在 Post SMTP 主畫面中,按一下 [傳送測試郵件]。
在 Post SMTP 主畫面中,按一下 [傳送測試郵件]
  1. 請指定測試郵件的收件者,然後按一下 [下一步]。
  2. 接下來 Post SMTP 會將測試郵件傳送至郵件伺服器,請注意寄送結果是 [成功] 還是 [失敗]。無論結果如何,請按一下 [下一步]。
  • 以 Gmail API 而言,WordPress 網站主機是透過是透過通訊埠 443 與它溝通,應該沒有大問題。主機商不是不能封鎖通訊埠 443,只放行特定標頭的通訊,但是這樣限制太嚴,很容易造成其他問題,所以一般主機商對通訊埠 80 及 443 是完整開放的。
  1. 測試郵件傳送成功的話,工作階段記錄應該不不太需要留意,因為這代表郵件已送達郵件伺服器。按一下 [完成] 就能回到 Post SMTP 的主畫面。
Post SMTP 寄送測試郵件的流程
  1. 應該不必多久,你設定接收測試郵件的收件地址就會收到測試郵件,測試郵件的樣子如下圖。
Post SMTP 寄送的的測試郵件

能正確收到測試郵件的話,後續使用上大概就沒有大問題了。

外掛使用注意事項

我想不少人應該沒有與通訊協定相關的基礎知識,這邊阿力獅盡量簡單說明,否則郵件寄送出了問題,你也不知道是哪一段出了問題。

  • 郵件的寄件與收件是兩種不同的通訊協定,Post SMTP 只負責把網站產生的郵件訊息透過相關的寄件通訊協定傳送給外寄郵件伺服器,它無法讓網站具備收件的能力。
  • Post SMTP 成功將郵件訊息傳送至外部郵件伺服器後,假如收件者沒有收到郵件,那是外寄郵件伺服器的問題,或是外寄郵件伺服器與收件者之間的問題。
  • 舉例來說,你使用了 Contact Form 7 建立了一張表單,且聯絡電子郵件欄位設定為必填,但填表者故意填了一個錯誤的電子郵件地址,這樣 Post SMTP 即使把表單外掛的通知郵件傳送給外寄郵件伺服器,外寄郵件伺服器也無法把郵件傳送到收件者信箱中,因為電子郵件地址本來就是錯的。即使真的有這個電子郵件地址,也不是正確的收件人[ref]阿力獅有一個 Gmail 服務剛上線、還在邀請制時期就建立的 Google 帳號,大概是這個帳號太簡單太好猜,常常會被其他人拿來隨便輸入註冊網路服務,這種郵件即使傳送到我的收件匣,阿力獅也不是正確的收件者。[/ref]。
  • 外寄郵件伺服器本身就有可能出問題[ref]使用可靠的雲端郵件伺服器服務,就比較不會遇到問題,畢竟雲端主機出問題,廠商可以馬上由備援主機補上。[/ref],外寄郵件伺服器即使沒有問題、而收件者的電子郵件地址沒錯,但是收件者的內送郵件伺服器也可能出問題,或是拒收[ref]這些牽涉到的是電子郵件伺服器的相關設定居多,與 WordPress 網站或網站主機本身沒有太大關連,也跟 Post SMTP 外掛無關。[/ref]你的外寄郵件伺服器寄送的郵件。
  • 使用 GmailGmail API 是兩種不同的寄送郵件方式,先不管這兩者的寄件配額限制,Post SMTP 要使用 Gmail 寄件,主機必須開放通訊埠 25、465 以及 587,但透過 Gmail API 寄件僅需開放通訊埠 443。不必擔心,多數主機不會封鎖通訊埠 443[ref]主機封鎖通訊埠 443 影響非常大,最低限度會造成網站有可能無法使用 HTTPS 通訊協定。[/ref]。
  • Post SMTP 外掛當然能使用以 Google 帳戶及密碼登入 Gmail 進行寄件,但是每日能使用的寄件配額遠低於使用 Gmail API。
  • Yahoo Mail 以及 Microsoft Outlook.com 都無法再以 OAuth 2.0 方式驗證,僅能使用帳號密碼登入[ref]至少照著 Post SMTP 開發者提及的方式,無法讓 Yahoo Mail 及 Microsoft 的 Outlook.com 使用 OAuth 2.0 驗證。[/ref]。

如何從舊版 Postman SMTP 移轉設定到新版的 Post SMTP

方法很簡單,先不要移除舊版的 Postman SMTP 外掛,然後安裝新版的 Post SMTP 外掛並進行偵錯測試,確認 Post SMTP 能正常寄送郵件後,就可以直接將 Postman SMTP 外掛停用並刪除。

外掛狀態

[table id=post-smtp /]

文章內容來源為《阿力獅的教室》。

--

--