描述問題/錯誤/問題
大家好!
遇到了一個 Gmail 自動回覆工作流的問題,它開始對同一個地址反覆發送回覆,即使在停用所有節點後仍然如此(這真的很奇怪)。
工作流程說明:
我們的電子郵件被合作夥伴透過抄送新增到發送給潛在客戶的電子郵件中。第一個節點每小時觸發一次,用來查找來自合作夥伴電子郵件地址的電子郵件,並按主旨行進行篩選,只篩選未讀電子郵件。然後設定收件者電子郵件地址和訊息 ID 的變數。下一個節點使用 ID 將訊息標記為已讀。接著下一個節點使用觸發器的執行緒 ID 在執行緒中回覆。然後將潛在客戶新增到表格中,並在 Zoho 中建立潛在客戶。
大約一週前開始出現這個問題,我們最近才注意到。最奇怪的部分是,即使在停用節點後,它仍然發送電子郵件,所以我們直接取消發佈工作流以確保安全。
我看到這裡有一些類似的執行緒,但這似乎有所不同,我們篩選了未讀訊息,但它仍然反覆拉起相同的電子郵件。
您的 n8n 設定資訊
n8n 版本: 2.20.7
執行 n8n 的方式: n8n Cloud
@Arsen 「停用後仍在傳送」這部分是在停用生效前觸發的佇列執行——n8n Cloud 不會取消進行中的執行,只會停止新的觸發器。所以那 50 個回覆是 50 個已經在佇列中的積壓執行。
首先出現那 50 個的根本原因可能是順序問題——如果標記為已讀的步驟失敗或執行緩慢,下一次每小時的輪詢會再次看到相同的未讀訊息並觸發另一個回覆。在每個執行日誌中,標記為已讀的步驟是否真的成功,還是無聲地失敗?
嗨 @achamm !
感謝你的回覆。實際上,從我所看到的,標記為已讀的節點在所有執行中都成功觸發了。
achamm:
「停用後仍繼續傳送」的部分是已佇列的執行
如果我沒有理解錯的話,主要模式不是被大多數標準雲端方案(Starter/Pro)所使用嗎?
如果是的話,就不會有任何佇列工作。
@Arsen ,你是使用企業方案嗎?
歡迎來到 n8n 社群 @Arsen
請透過管理員面板將您的執行個體更新至 v2.21.7。
返回工作流程,取消停用節點並重新啟用。發佈
執行,如果可能的話,請將結果回傳給我們。
還有一件很奇怪的事 - 電子郵件被發送給同一個人50次,但那個人的地址在試算表中只被新增了一次
hello @Arsen
請分享工作流程。
您可以使用 Ctrl+A 選擇所有節點,並使用 Ctrl+C 複製它們。然後,按下 </> 按鈕後,使用 Ctrl+V 貼上內容。
我注意到您的 Gmail 觸發器有超過 1 個項目,如果後續節點配置不當,可能會導致某些問題
真正的問題是 Trigger 和 mark-as-read Node 之間的 Race Condition。Gmail 根據 API 請求時的狀態返回未讀電郵。如果 Trigger 取得電郵而 mark-as-read Node 還未執行,下一次執行可能會再次取得同一封電郵,尤其是當執行重疊時。
最佳解決方案是在 Trigger 後添加一個基於 Message-ID 的去重過濾器。將已處理的 Message-ID 存儲在 Static Data Store 或 Google Sheet 中。在處理前檢查該 ID 是否已存在。
你使用的是哪個計畫?Cloud 還是 self-hosted?
Arsen
2026年05月28日17:30
13
嗨 @Kemal_Automation !
我正在使用雲端 n8n。
我認為如果電子郵件也能一次次地新增到試算表中,那就更合理了
嗨 @Arsen
請你檢查一下 Gmail 自動回覆設定好嗎?
你進入 Gmail > 設定 > 一般 > 休假自動回覆(休假自動回覆關閉/開啟)。
如果自動回覆已關閉。那麼,請確保遵循這些步驟。
在小範圍內測試,通過複製工作流程來測試,只需更改設定,而不是從合作夥伴電子郵件讀取,改為從你的電子郵件讀取(不是 ccd 那個)
保留所有設定並使用一個電子郵件(可以用來傳送或接收的新電子郵件來測試)
將觸發時間減少到 1 分鐘僅用於測試,
在回覆訊息時停止(因為這是停滯點)
確保逐步進行流程測試(發佈前)
如果運作良好,則發佈小範圍
在生產環境中再次測試,應該就能運作了!
沒錯,如果相同的電子郵件在試算表中一次又一次地出現,那就證實了這個問題。
解決方案是在觸發器後立即添加一個代碼節點,用於檢查訊息 ID 是否已被處理過。如果你需要幫助進行精確設置,我很樂意幫助你!
@Arsen 在執行日誌中,那 49 次執行中是否有 49 次在回覆節點後的節點上顯示失敗/錯誤?如果是的話,工作流程成功完成了回覆,然後在下游遇到錯誤,但由於 n8n 已經發送了電子郵件,損害已經造成了。
Gmail 觸發器輪詢時會返回什麼?
Arsen
2026年05月29日14:19
17
@sergeys @Kemal_Automation
非常感謝你們的回答!
那正是問題所在;執行過程中沒有任何錯誤,每次執行都完成了。電子郵件並沒有一次又一次地被加入試算表。它只被加入了一次,就這樣
所以如果沒有錯誤,且表格只有一個條目,問題可能是因為你的合作夥伴的回覆在 Gmail 中將電子郵件標記為未讀。這樣一來,觸發器會每小時重新提取一次。作為解決方案,在觸發器之後直接添加一個篩選條件,檢查電子郵件是否在過去 2 小時內收到。這樣舊的電子郵件就無法再進入迴圈。
Arsen
2026年05月30日23:46
19
@Kemal_Automation
謝謝!
其實,我們的合作夥伴沒有回應,而是我們在回應電子郵件。我們只是回應收件者,反正也不涉及我們的合作夥伴。這就是為什麼這真的很奇怪
好的,那麼夥伴理論就排除了。我的下一個懷疑是,Gmail 在你回覆後會在內部將電子郵件重新標記為未讀,因為執行緒被更新了。
作為測試,在「標記為已讀」節點後添加 1-2 秒的短暫等待時間,然後再次執行「標記為已讀」。有時候 Gmail 需要一點時間才能使變更生效。
好的,看一下工作流程的螢幕截圖——Gmail 觸發篩選條件(未讀 + 合作夥伴寄件者 + 主旨)、使用 $('Edit Fields').item.json.id 標記為已讀、使用 $('Gmail Trigger').item.json.threadId 進行回覆。這些看起來都沒問題。
如果 50 個分開的每小時執行都不斷發現同一則訊息未讀,而且「標記為已讀」持續報告成功,那麼一定是有什麼東西在輪詢之間把該電子郵件翻回未讀狀態——可能是 Gmail 篩選規則、行動應用程式,或其他 IMAP 客戶端在觸發收件匣。你不會從 n8n 內部修復這個根本原因。你可以修復的是讓工作流程拒絕發送同一則回覆兩次,無論讀取狀態如何。
在 Gmail 觸發和編輯欄位之間放入這個程式碼節點。它在 n8n 的靜態工作流程資料中持久化已處理的訊息 ID,以便重複項在各個執行中被過濾出來:
$getWorkflowStaticData('global') 在 n8n Cloud 上的各個執行中都會保留下來,所以 ID 清單會被保存。訊息第一次通過時會被記錄 + 傳遞給下游;第二次時篩選器會將其丟棄,工作流程就會短路到零項目。現在即使 Gmail 持續重新標記為未讀,你也只會針對每個唯一的訊息 ID 發送一次回覆。