Email Trigger (IMAP) 在手動「執行工作流程」時觸發,但在發布(生產環境)後從未觸發 — v2.0.3

我正在構建一個工作流程,使用 Email Trigger (IMAP) 節點接收傳入的電子郵件(帶附件)。
當我在編輯器中打開工作流程、點擊 Execute Workflow,並發送測試電子郵件時,觸發器會正確觸發,我會收到實際附件——一切都按預期工作。
但是,在我 Publish 工作流程使其在生產環境中運行後,新的傳入電子郵件 完全不 觸發工作流程。沒有建立任何執行,執行列表中也沒有任何內容。
我使用的是 n8n 2.0.3。我已經排除的事項:

  • 發布的版本與手動執行中的版本相同(已在版本歷史中驗證)。
  • 發布後,我發送了一封 全新的、未讀的 電子郵件——而不是之前打開過/已讀的郵件。
  • IMAP 認證資訊是有效的(手動執行每次都能正常工作)。
    提前感謝您的幫助!

請分享您的工作流程

分享最後一個節點傳回的輸出

沒有輸出——發布工作流程時觸發器節點永遠不會觸發,所以沒有執行可以檢查。在手動模式下,它會正確傳回電子郵件和已下載的附件。

關於您的 n8n 設定的資訊

  • n8n 版本:2.0.3
  • 資料庫(預設:SQLite):
  • n8n EXECUTIONS_PROCESS 設定(預設:own, main):
  • n8n 執行方式(Docker、npm、n8n cloud、桌面應用程式):Docker
  • 作業系統:

我沒有 IMAP 觸發器的相關經驗,所以我無法對你排除的 IMAP 相關事項發表意見。
不過有一個基本的事情我沒有看到被提及;工作流程是否已切換為啟用(不只是保存/發布)?
手動「執行工作流程」無論該切換如何都會執行,但生產觸發器只有在工作流程實際處於啟用狀態時才會觸發。
我在早期使用不同的觸發器類型時就遇到過這個區別,所以在你進一步深入調查 IMAP 特定原因之前,想先檢查一下這裡是否是同樣的情況。

Hi @TrinhNhatHuy

看看你提供的 JSON,你的 Email Trigger (IMAP) 節點沒有連接到任何其他節點​:"connections": { "Email Trigger (IMAP)": { "main": [ [] ] } }

在 n8n 中,「手動執行」和「生產執行」之間有重大差異:

  • **手動執行:**當你點擊「執行工作流程」時,n8n 會運行你正在互動的特定節點,並向你顯示它檢索的數據。之所以有效,是因為你基本上是在詢問節點,「你現在會找到什麼?」
  • **生產執行:**當工作流程發布時,觸發器會等待事件。如果觸發器觸發但 沒有連接到任何後續節點​,n8n 可能不會在歷史記錄中建立執行記錄,因為沒有「工作流程」可以實際處理——觸發器已觸發,但無處發送數據。

嘗試將 Email Trigger 連接到簡單的 **No-Op(等待或代碼節點)**或 Discord/Slack/Email 節點,然後再次發布。

基於 kjooleng 的觀點(未連接的觸發器是這裡最常見的原因)— 如果連接到節點還是無法修復,有兩個 IMAP 特定的問題只會在生產環境中出現,因為手動「執行」永遠不會觸發它們:

1. 將工作流程的「活躍」狀態關閉,然後再開啟。 IMAP 觸發器只在工作流程被啟動時才會開啟其輪詢/IDLE 連接。如果在你上次發布後該連接沒有重新建立 — 或郵件伺服器中斷了 idle 會話 — 觸發器會保持沉默,且完全不記錄任何執行。停用並重新啟動會強制 n8n 重新開啟它。這個方法的修復成功率比人們預期的還要高。

2. 確保只有一個主實例處於活躍狀態。 你在使用 Docker:如果第二個容器指向同一個數據庫,或者你在佇列模式下,輪詢/觸發節點只會在主實例上運行 — 一個流氓活躍實例可能會悄悄吞掉輪詢。

(觸發器也會預設擷取未讀郵件,但你已經通過發送新的未讀訊息排除了這個可能性。)

如果重新啟動後仍然沒有反應,請說明是單實例還是佇列模式,我們就能進一步縮小問題範圍。

感謝您的支持!在版本 2.0.3 中,我不再看到工作流程的「啟用」切換開關。它只顯示發佈工作流程的選項,而我已經發佈過它了。

感謝 @kostasuser01gr,在我的實際工作流程中,我已經像這樣將它連接到其他節點

要修正此問題,您必須告訴 n8n 如何處理已擷取的電郵。

  1. 開啟您的 Email Trigger (IMAP) 節點。
  2. 尋找 Post-process Action 參數。
  3. 將其從「Nothing」變更為下列其中之一:
    • Mark as Read​:這是最常見的選項。工作流程會在「Unread」電郵上觸發,一旦觸發後,會將其標記為「Read」以避免重複處理。
    • Move to Folder​:將電郵移至「Processed」資料夾。這是生產環境中最可靠的方法。
  4. 再次 Save and Publish 工作流程。

嗨 @nathan3、@kjooleng,感謝你們的回應。我試了你們的第一個建議,先取消發佈再重新發佈工作流程,結果成功了。

我的疑慮是未來要怎樣才能偵測到這個問題。有沒有辦法監控 IMAP 觸發器是否停止接收電子郵件,這樣我就能知道什麼時候需要取消發佈並重新發佈工作流程?

我會偏好一個比手動檢查工作流程更可靠的解決方案,特別是如果 IMAP 連線可以在不產生任何執行日誌的情況下無聲地中斷。

你可以建立一個在 Schedule Trigger(例如每 1 小時)上執行的新工作流程。

  • 步驟 1: 從你的資料庫/Google Sheet/KV Store 讀取「Last Run」時間戳記。
  • 步驟 2: 使用 IF Node 檢查:(當前時間 - 最後執行時間) > 2 小時嗎?
  • 步驟 3: 如果為 True,發送緊急警報給自己(Slack、Telegram 或 Email),內容為:「警告:電子郵件工作流程已 2 小時未處理電子郵件。檢查 IMAP 連線。」

如果你的電子郵件提供商支援此功能(例如透過 Pub/Sub 的 Gmail),從 IMAP 輪詢切換到基於 Webhook 的推送可靠性提高 100%,因為 n8n 不必維持一個持續開啟的連線;伺服器會在有郵件時告知 n8n。

要補充一點還沒有人提過的——除了 kjooleng 的看門狗外,節點本身還有一個內建的預防機制。

在電子郵件觸發器 (IMAP) 節點上,開啟「選項」→「每 X 分鐘強制重新連線」(預設值為 60)。將其降低至約 15-30 分鐘,讓 n8n 定期中斷並重新建立 IMAP 連線,這樣無聲掉線的套接字就能自動修復,無需取消發佈/重新發佈。這樣可以從根本上解決「連線悄悄中斷」的情況,而 kjooleng 的上次執行時間戳檢查可以捕捉任何仍然漏掉的問題。

該時間戳看門狗有一點需要注意:「X 小時內沒有電子郵件」只有在你確實預期有穩定流量時才等同於「故障」。如果入站量不規則,讓看門狗在每個週期向郵箱發送一封測試電子郵件,並驗證它是否已被處理——這樣可以測試連線,不受實際郵件的影響。

好的,這排除了我的想法。
我不熟悉 2.0.3 版本中舊的「啟用」切換和「發佈」之間發生了什麼變化,所以我這裡沒有進一步的猜測。
希望對 2.0.3 變更有更多了解的人能夠說明已發佈狀態是否對應於其他內容,或者這是否值得單獨提交錯誤報告。

嘿!這是一個經典的「在測試中運行,在生產環境中失敗」的場景,真的很令人沮喪。

因為手動測試時運行得完美無缺,你的認證和基本設定肯定是正確的。問題在於 n8n 處理手動測試和活躍背景輪詢的方式不同。

當你點擊「執行工作流程」時,n8n 連接一次、檢查收件匣一次,然後斷開連接。但當工作流程被發布(活躍)時,IMAP 觸發器會在持續的背景輪詢迴圈中運行。

查看你的工作流程 JSON,主要嫌疑人是 forceReconnect: 1 選項。這告訴 n8n 在每次輪詢時強制建立全新連接(通常每 1 分鐘一次)。大多數電子郵件提供商會將來自單一 IP 的這種快速連接/斷開循環視為可疑,並暫時進行速率限制或無聲地丟棄背景連接。

以下是修復此問題的逐步行動計畫:

1. 調整或移除 forceReconnect

  • 打開你的電子郵件觸發器(IMAP)節點。
  • 在「選項」下,將「強制重新連接」從 1 改為更高的數字(例如 10 或 20),或如果你不特別需要該選項,完全移除它。
  • 保存並重新啟用工作流程,然後發送新的測試電子郵件。

2. 檢查 Docker 背景日誌

由於觸發器在生產環境中從未成功觸發,你不會在 n8n UI 的「執行」標籤中看到任何錯誤。錯誤發生在背景程序中。

  • SSH 進入你的 RHEL 主機並運行:docker logs <your_n8n_container_name>
  • 尋找與 emailReadImap 相關的連接逾時或認證阻止。

3. 考慮更新 n8n

你目前在版本 2.0.3。自早期 2.x 版本發布以來,背景輪詢和活躍觸發器已有許多穩定性修復。如果調整重新連接參數無法解決問題,強烈建議升級到更新的穩定版本。


@TeSIdrah 回答你的問題:在 v2.0.3 中,「Publish」在功能上等同於舊的「Active」切換開關——工作流程仍然以背景輪詢模式執行。重新命名純粹是使用者介面方面的改動,所以 IMAP 觸發器行為在版本之間不應該改變。

如果觸發器手動運作但發佈後不運作,最可能的原因是:

  1. forceReconnect 設定為 1(如 n8n_Sensei 指出的那樣)——先修正這個
  2. IMAP 閒置逾時在連線保持開啟過久後被郵件伺服器無聲地捨棄

快速檢查方法:發佈後,前往「Executions」並按你的工作流程篩選。如果你看到任何傳入電子郵件的零個生產執行,表示連線無聲地斷開了。如果你看到執行但出現錯誤,日誌將告訴你發生了什麼。

檢查生產執行日誌,並確認已發佈的工作流程在保存 IMAP 認證的同一執行個體上是否為活躍狀態。我也建議在發佈後使用全新的未讀訊息進行測試,因為手動執行可能會使用不同的觸發路徑。