外掛說明
這個外掛會透過延遲使用 wp_mail()
傳送的電子郵件,以提高 WordPress 網站安全性。
如果網站顯示出任何異常行為,例如惡意漫遊器試圖濫填網站的聯絡表單,網站管理員便會直接收到通知。
- 攔截
wp_mail()
並將電子郵件加入至佇列中 - 控制電子郵件的傳送頻率及數量
- 記錄佇列中的全部電子郵件傳送
- 佇列額滿時通知網站管理員
- WordPress 網站無法傳送電子郵件時通知網站管理員
螢幕擷圖
安裝方式
上傳並啟用外掛後,前往外掛設定頁啟用 [佇列] 功能。
請確保網站的 WP Cron 可如常執行。
常見問題集
-
是否需要進行任何組態?
-
需要。啟用外掛後,請前往外掛設定頁面進行組態。
網站管理員可以啟用 [佇列] 功能,藉以控制電子郵件傳送頻率及數量。
網站管理員還可以啟用 [通知] 功能,控制在何時需要接收通知。
-
這個外掛如何運作?
-
外掛的功能開始執行後,便會攔截
wp_mail()
函式。此時不會直接傳送電子郵件,而是改將電子郵件儲存於資料庫中,並透過執行 WP Cron 進行延遲以逐步傳送電子郵件。 -
這個外掛是否會變更電子郵件的傳送方式?
-
不會。這個外掛不會變更電子郵件的傳送方式。舉例來說,如果這個網站使用 SMTP 傳送電子郵件,或是使用 Mailgun 這類外部服務,一切仍會如預期般運作。
這個外掛只會影響電子郵件傳送的時機,它會透過 [佇列] 功能控制在指定時間間隔內要傳送的電子郵件數量。
-
如果網站安裝了快取外掛,這個外掛是否能正確運作?
-
如果這個網站正在使用如 W3 Total Cache、WP Rocket 等快取外掛或其他會為網站訪客產生並提供靜態 HTML 檔案的快取解決方案,網站管理員必須每隔幾分鐘便手動呼叫
wp-cron
檔案。如果不這麼做,便不會定期呼叫 WP Cron,加入排程的訊息,在傳送前會遇到極大的延遲。
-
使用如 NGINX 的 Proxy 快取會產生任何影響嗎?
-
開發者也是這種組態。請確認每隔幾分鐘便由外部服務或網站主機呼叫 WordPress Cron。
-
網站使用的聯絡表單編輯器支援附件,這些附件會如何處理?
-
這個外掛也支援附件,全部附件在對應的電子郵件寄出前,都會暫時儲存於佇列中。
-
什麼是佇列通知?
-
這是簡單、有效,並能提高這個 WordPress 網站安全性的方式。
請假想一下,如果網站透過 wp_mail() 傳送垃圾電子郵件,電子郵件佇列便會很快額滿,以防止網站一次傳送太多垃圾電子郵件。這項措施能夠為網站管理員爭取處理時間,也能避免很多不必要的麻煩。
佇列通知會在佇列高出預期時通知網站管理員,並且可以設定要收到通知的時機,這樣便有機會查看網站是否出了問題。
-
是否能將高優先順序的電子郵件加入佇列?
-
可以。請將
X-Mail-Queue-Prio
自訂標頭在電子郵件中設定為High
。高優先順序的電子郵件會透過標準電子郵件佇列週期傳送,但會比沒有設定優先順序標頭的一般電子郵件更早傳送。範例 1:為 WooCommerce 電子郵件設定優先順序
add_filter('woocommerce_mail_callback_params',function ( $array ) { $prio_header = 'X-Mail-Queue-Prio: High'; if (is_array($array[3])) { $array[3][] = $prio_header; } else { $array[3] .= $array[3] ? "\r\n" : ''; $array[3] .= $prio_header; } return $array; },10,1);
範例 2:為 Contact Form 7 聯絡表單電子郵件設定優先順序
在編輯 Contact Form 7 的聯絡表單時,僅需在 [電子郵件] 分頁的 [其他標頭] 欄位加入下列標頭即可。
X-Mail-Queue-Prio: High
範例 3:為 WordPress 重設密碼電子郵件設定優先順序
add_filter('retrieve_password_notification_email', function ($defaults, $key, $user_login, $user_data) { $prio_header = 'X-Mail-Queue-Prio: High'; if (is_array($defaults['headers'])) { $defaults['headers'][] = $prio_header; } else { $defaults['headers'] .= $defaults['headers'] ? "\r\n" : ''; $defaults['headers'] .= $prio_header; } return $defaults; }, 10, 4);
-
是否能略過佇列立即傳送電子郵件?
-
可以,如果真的有這個需求,的確可以達成這個目標。
要達成這個目的,請將
X-Mail-Queue-Prio
自訂標頭在電子郵件中設定為Instant
。這些電子郵件會略過佇列,立即傳送,但會在 [記錄] 分頁的記錄中標示為instant
。請審慎考慮這樣做是否有潛在的安全性風險,並僅使用於例外狀況。
範例 1:立即傳送 WooCommerce 電子郵件
add_filter('woocommerce_mail_callback_params',function ( $array ) { $prio_header = 'X-Mail-Queue-Prio: Instant'; if (is_array($array[3])) { $array[3][] = $prio_header; } else { $array[3] .= $array[3] ? "\r\n" : ''; $array[3] .= $prio_header; } return $array; },10,1);
範例 2:立即傳送 Contact Form 7 聯絡表單電子郵件
在編輯 Contact Form 7 的聯絡表單時,僅需在 [電子郵件] 分頁的 [其他標頭] 欄位加入下列標頭即可。
X-Mail-Queue-Prio: Instant
範例 3:立即傳送 WordPress 重設密碼電子郵件
add_filter('retrieve_password_notification_email', function ($defaults, $key, $user_login, $user_data) { $prio_header = 'X-Mail-Queue-Prio: Instant'; if (is_array($defaults['headers'])) { $defaults['headers'][] = $prio_header; } else { $defaults['headers'] .= $defaults['headers'] ? "\r\n" : ''; $defaults['headers'] .= $prio_header; } return $defaults; }, 10, 4);
-
是否仍能像平時般使用 wp_mail() 函式?
-
可以,wp_mail() 函式可以如預期般執行。
呼叫 wp_mail() 函式傳回預期中的
true
,代表電子郵件以加入佇列。例外狀況:
如果因故無法將電子郵件儲存至資料庫中,wp_mail() 函式會傳回
false
。但是如果電子郵件使用即時標頭設定,則該電子郵件便會列入重要電子郵件。在這種狀況下,即使電子郵件在佇列中建立記錄時發生錯誤,電子郵件仍會立即寄出。
-
在多站網路中可以使用 Mail Queue 嗎?
-
可以,但是有若干限制。
請不要為整個多站網路啟用 Mail Queue,請改為為個別子網站啟用這個外掛,這個外掛便會順利執行。在未來的版本中,開發團隊會加入對多站網路的完整支援。
-
Mail Queues 開發團隊最喜愛的歌曲?
使用者評論
參與者及開發者
變更記錄
1.4.2
- Database improvements
1.4.1
- Refine detection for html when previewing emails
- Catch html parse errors when previewing emails
1.4
- Added support for previewing HTML emails as plain text
- Improved preview for HTML emails
- Minor bug fixes
1.3.1
- Added support for the following
wp_mail
hooks:wp_mail_content_type
,wp_mail_charset
,wp_mail_from
,wp_mail_from_name
- Minor bug fixes
1.3
- Refactor to use WordPress Core functionality
- Added option to set the interval for sending emails in minutes or seconds
- Added feature to send emails with high priority on top of the queue
- Added feature to send emails instantly without delay bypassing the queue
1.2
- Perfomance and security improvements
1.1
- Resend emails
- Notification if WordPress can’t send emails
1.0
- Initial release.