嗨,我有來自 zoho 和其他使用函數節點(使用登入和密碼)的幾個電子郵件信箱。
已使用應用密碼
主機:imap.zoho.com
連接埠:993
IMAP/SMTP 核取方塊:是
n8n 無法使用函數節點存取 ZOHO 收件匣。
對於此問題有任何建議或解決方案嗎?
謝謝
const imaps = require(‘imap-simple’);
const config = {
imap: {
user: ‘YOUR_FULL_EMAIL@zoho.com’,
password: ‘YOUR_16_CHAR_APP_PASSWORD’, // 沒有空格
host: ‘imap.zoho.com’,
port: 993,
tls: true,
authTimeout: 10000,
tlsOptions: {
servername: ‘imap.zoho.com’,
rejectUnauthorized: true
}
}
};
try {
// 直接在此處傳遞 ‘config’
const connection = await imaps.connect(config);
await connection.openBox('INBOX');
// 始終關閉連線
connection.end();
return [{ json: { success: true } }];
} catch (err) {
return [{ json: { success: false, error: err.message } }];
}
描述問題/錯誤/問題
錯誤訊息是什麼(如果有)?
請分享您的工作流程
(在您的畫布上選擇節點,並使用鍵盤快速鍵 CMD+C/CTRL+C 和 CMD+V/CTRL+V 複製和貼上工作流程。)
分享最後一個節點傳回的輸出
您的 n8n 設定資訊
- n8n 版本:
- 資料庫(預設值:SQLite):
- n8n EXECUTIONS_PROCESS 設定(預設值:own、main):
- 執行 n8n 的方式(Docker、npm、n8n 雲端、桌面應用程式):
- 作業系統:
嗨 @ITteck_hub ,歡迎回來!
這裡有兩個問題:
-
require('imap-simple') 預設不會在 Code 節點中運作。外部 npm 套件在沙盒中被阻止,除非你設定 NODE_FUNCTION_ALLOW_EXTERNAL 環境變數並在你的 n8n 執行個體中安裝該套件。對於 n8n 原本就支援的功能來說,這樣做太麻煩了。
-
改用 Email Trigger (IMAP) 節點。使用以下設定 IMAP 憑證:
-
使用者:你的 Zoho 電子郵件
-
密碼:你的 16 字元應用程式密碼
-
主機:imap.zoho.com
-
連接埠:993
-
SSL/TLS:已啟用
觸發程式會以自己的間隔自動輪詢新電子郵件,所以你不需要單獨的排程觸發程式。
你有特定的理由需要使用 Code 節點方法而不是內建觸發程式嗎?
是的,已經完成 ODE_FUNCTION_ALLOW_EXTERNAL。
Email trigger IMAP 沒有靈活性來處理多個 Inbox/user ids。
還有其他選項嗎?
早安 @ITteck_hub
我通常會為每個信箱建立一個 IMAP 電子郵件觸發認證,或將輪詢分割到不同的工作流程中。如果您需要從使用者清單進行動態信箱輪詢,更安全的選項是執行一個小型外部 IMAP 服務/指令碼,讓 n8n 透過 HTTP 呼叫它,而不是在程式碼節點內管理多個 IMAP 工作階段和認證。同時也要再次檢查 Zoho 端,確認信箱已啟用 IMAP、應用程式密碼有效、帳戶區域/主機正確,以及沒有 IP/安全性限制阻擋您的 n8n 伺服器。
對於多個信箱的動態處理,一個有效的模式是:將信箱清單(使用者、應用程式密碼、主機)存放在 Google 試算表或資料庫中,然後使用排程觸發器 + 迴圈來逐列迭代。在迴圈內,Code 節點使用 imap-simple(已設定 N8N_FUNCTION_ALLOW_EXTERNAL)並使用該列中的認證資訊為每個信箱開啟新連線。每個連線在同一次迭代內建立並關閉,這樣可以避免工作階段重疊問題。如果 Zoho 的 IMAP 仍然按信箱失敗,也要檢查每個帳戶在 Zoho Mail 設定中是否明確啟用 IMAP - 即使使用組織層級的應用程式密碼,Zoho 有時仍需要按信箱啟用。
Email IMAP 觸發器運作正常..我認為會試著從資料庫取得電子郵件 id/pw/host 詳細資訊,而不是在函式檔案中設定。
在 zoho 電子郵件伺服器還是 n8n vps 上?