Mail Queue

外掛說明

這個外掛會透過延遲使用 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 開發團隊最喜愛的歌曲?

使用者評論

2024 年 8 月 29 日
This plugin is a must have in all my clients’ websites, speed up SMTP email flow. It deserves 5 stars⭐⭐⭐⭐⭐Thanks team for the plugin. Highly recommend plugin for your websites👌
2024 年 8 月 10 日
This is a good plugin. Easy to configure and use. Good support.
閱讀全部 5 則使用者評論

參與者及開發者

以下人員參與了開源軟體〈Mail Queue〉的開發相關工作。

參與者

將〈Mail Queue〉外掛本地化為台灣繁體中文版

對開發相關資訊感興趣?

任何人均可瀏覽程式碼、查看 SVN 存放庫,或透過 RSS 訂閱開發記錄

變更記錄

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.