Wenn der Arbeitgeber keine KI zulässt: Wie man ein Mail-KI-Chat-Gateway baut

Published on HivePostify by @achimmertens · Fri Jul 31 2026

Hallo zusammen,

um es vorweg zu nehmen: Dies ist ein heikles Thema und ich möchte nicht zu etwas Illegalem ermuntern.

Worum geht es? Viele von uns kennen das Problem, dass man auf der Arbeit keinen Zugang zur KI hat. Aber sie würde an der ein oder anderen Stelle schon ganz gut helfen. Also schickt man sich eine Email mit dem Prompt. Und auf dem privaten Handy/PC fragt man dann die KI. Die Antwort schickt man sich wieder an die Arbeitsmail und macht dann weiter.

Das Ganze hat zwei Haken: 1. Es untergräbt die Firmenpolicy Hier sage ich klar und deutlich: Überlege gut was du tust. In den Prompst können Firmengeheimnisse stecken, die nicht ins Internet dürfen, weder per Email noch per Prompt. Erst wenn du ganz sicher bist, dass der Prompt harmlos ist, kommen wir zu: 2. Es ist aufwendig Hier kann ich einen Tipp geben, bzw. zeigen, wie ich das Problem gelöst habe: Ich habe mir von Openclaw einen N8N Workflow basteln lassen, der als Mail-KI-Schnittstelle funktioniert. Man schickt wie bisher die Mail mit den Prompt an eine Adresse und erhält nach ein paar Sekunden/Minuten das Ergebnis als Mail zurück. Kein Rauskopieren und chatbot fragen mehr.

N8N Workflow: Mail-KI-Chat Ein n8n-Workflow auf dem Raspi5 (192.168.xxx.yyy:5678), der eingehende E-Mails verarbeitet und automatisch mit KI beantwortet.

Ich mache noch eine Fallunterscheidung: Wenn das Wort "Helbardor" (Name meines Openclaw Agenten) im Betreff auftaucht, dann soll dieser Agent antworten. Das ist dann sinnvoll, wenn ich persönliches Wissen habe, das nicht im Internet steht (Achtung: Auch hier könnten sensible Daten zumindest unverschlüsselt durch das Internet geschickt werden). Wenn nicht explizit mein Agent angesprochen wird, wird direkt ein LLM aus dem Internet angesprochen.

| Betreff enthält | Route | Antwort von | |---|---|---| | KI-Chat (ohne Helbardor) | → Openrouter | DeepSeek V4 Flash | | KI-Chat Helbardor | → Helbardor | Helbardor (mit Memory) |

Zweck

Eingehende Mails an [email protected] werden automatisch von einer KI beantwortet, ohne dass ich selbst tätig werden muss.

Datenfluss

1. IMAP Trigger – Pollt alle 60s auf neue ungelesene Mails 2. Filter + Route (Code-Node) – Prüft Absender-Whitelist + Betreff auf "KI-Chat" 3. IF Openrouter? – Route zu DeepSeek V4 Flash 4. IF Helbardor? – Route zu Helbardor-API-Server 5. Openrouter-Zweig: E-Mail aufbereiten → DeepSeek V4 Flash (Agent) → Antwort senden 6. Helbardor-Zweig: E-Mail aufbereiten → Helbardor API → Antwort senden

Absender-Whitelist

Nur folgende Absender werden akzeptiert: - [email protected]

Scripte (von Helbardor erstellt)

- helbardorapiserver.py – Helbardor-API - mailservicesmtp.py – Mail-Versand - updateworkflowv2.py – Workflow-Aktualisierung via API - n8n-mail-ki-chat-workflow.json – Vollständiger Workflow-Export (siehe unten)

Wie erstellt man einen N8N Workflow Ich habe dazu schon mal einen Post geschrieben: Siehe [hier](https://peakd.com/hive-121566/@achimmertens/wie-man-einen-email-auswerte-workflow-mit-n8n-erstellt)

Wie kannst du das nachbauen Du brauchst: - Einen Server (raspberry Pi oder wo auch immer. Er muss nicht aus dem Internet erreichbar sein, da er via Mail getriggert wird) - Einen Email-Account - einen LLM Provider (Ich empfehle https://openrouter.ai) - Einen KI-Agenten auf deinem Server (ich habe Openclaw genommen, siehe [meine Erfahrungen](https://peakd.com/hive-121566/@achimmertens/openclaw-bot-installation-und-erste-erfahrungen))

Der Rest erledigt sich, indem du deinen Agenten bittest meine Doku zu lesen und es nachzubauen.

Anhang: Der Workflow

JSON { "updatedAt": "2026-07-27T11:29:17.337Z", "createdAt": "2026-07-27T08:06:55.775Z", "id": "", "name": "Mail-KI-Chat", "description": null, "active": true, "isArchived": false, "nodes": [ { "parameters": { "options": { "customEmailConfig": "[\"UNSEEN\"]", "forceReconnect": 60, "trackLastMessageId": false } }, "id": "imapTrigger", "name": "Email Trigger (IMAP)", "type": "n8n-nodes-base.emailReadImap", "typeVersion": 2.1, "position": [ 256, 256 ], "credentials": { "imap": { "id": "", "name": "IMAP account" } } }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst subject = (item.subject || '').toLowerCase();\nconst from = (item.from || '').toLowerCase();\n\nconst allowedSenders = [\n '[email protected]',\n ];\n\nconst isAllowed = allowedSenders.some(s => from.includes(s));\nconst hasKiChat = subject.includes('ki-chat');\n\nif (!hasKiChat || !isAllowed) {\n return null;\n}\n\nlet route = 'openrouter';\nif (subject.includes('helbardor')) {\n route = 'helbardor';\n}\n\nreturn [{ json: {\n absender: item.from || 'Unbekannt',\n betreff: item.subject || 'Kein Betreff',\n inhalt: item.textPlain || item.html || '',\n route: route\n}}];" }, "id": "filterRoute", "name": "Filter + Route", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 480, 256 ] }, { "parameters": { "conditions": { "combinator": "or", "conditions": [ { "id": "o1", "leftValue": "={{ $json.route }}", "rightValue": "openrouter", "operator": { "type": "string", "operation": "equals" } } ], "options": { "caseSensitive": false, "leftValue": "", "typeValidation": "strict", "version": 3 } }, "options": {} }, "id": "ifOpenrouter", "name": "IF Openrouter?", "type": "n8n-nodes-base.if", "typeVersion": 2.3, "position": [ 704, 256 ] }, { "parameters": { "conditions": { "combinator": "or", "conditions": [ { "id": "h1", "leftValue": "={{ $json.route }}", "rightValue": "helbardor", "operator": { "type": "string", "operation": "equals" } } ], "options": { "caseSensitive": false, "leftValue": "", "typeValidation": "strict", "version": 3 } }, "options": {} }, "id": "ifHelbardor", "name": "IF Helbardor?", "type": "n8n-nodes-base.if", "typeVersion": 2.3, "position": [ 928, 400 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nreturn [{ json: {\n absender: item.absender || 'Unbekannt',\n betreff: item.betreff || 'Kein Betreff',\n inhalt: item.inhalt || ''\n}}];" }, "id": "prepareEmailOR", "name": "E-Mail aufbereiten (OR)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 928, 112 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nreturn [{ json: {\n absender: item.absender || 'Unbekannt',\n betreff: item.betreff || 'Kein Betreff',\n inhalt: item.inhalt || ''\n}}];" }, "id": "prepareEmailHB", "name": "E-Mail aufbereiten (HB)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1216, 400 ] }, { "parameters": {}, "id": "openrouter", "name": "OpenRouter Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter", "typeVersion": 1.1, "position": [ 1232, 224 ], "credentials": { "openRouterApi": { "id": "j2sgF0h", "name": "OpenRouter account" } } }, { "parameters": { "promptType": "define", "text": "=Du bist ein hilfreicher Assistent. Beantworte die folgende Nachricht des Nutzers ausführlich und auf Deutsch. Schreibe eine komplette, hilfreiche Antwort:\n\n{{ $json.inhalt }}", "options": {} }, "id": "agent", "name": "KI-Chat Agent", "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 1.3, "position": [ 1152, 0 ] }, { "parameters": { "method": "POST", "url": "http://192.168.178.62:8768/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "text", "value": "={{ $json.inhalt }}" }, { "name": "absender", "value": "={{ $json.absender }}" } ] }, "options": { "timeout": 120000 } }, "id": "helbardorApi", "name": "Helbardor API", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1504, 400 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst output = item.output || item;\nlet antwort = '';\nif (typeof output === 'string') antwort = output;\nelse if (output.text) antwort = output.text;\nelse if (output.output) antwort = output.output;\nelse if (output.response) antwort = output.response;\nelse antwort = JSON.stringify(output);\n\nconst absender = $('E-Mail aufbereiten (OR)').first().json.absender || 'Unbekannt';\nconst origBetreff = $('E-Mail aufbereiten (OR)').first().json.betreff || 'KI-Chat';\n\nreturn [{ json: {\n antwort: antwort,\n absender: absender,\n betreff: 'Re: ' + origBetreff\n}}];" }, "id": "prepareResponseOR", "name": "Antwort aufbereiten (OR)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1504, 112 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst data = item.json || item;\nconst antwort = data.antwort || 'Keine Antwort erhalten.';\nconst absender = $('E-Mail aufbereiten (HB)').first().json.absender || 'Unbekannt';\nconst origBetreff = $('E-Mail aufbereiten (HB)').first().json.betreff || 'KI-Chat';\n\nreturn [{ json: {\n antwort: antwort,\n absender: absender,\n betreff: 'Re: ' + origBetreff\n}}];" }, "id": "prepareResponseHB", "name": "Antwort aufbereiten (HB)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1728, 400 ] }, { "parameters": { "method": "POST", "url": "http://192.:8767/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "to", "value": "={{ $json.absender }}" }, { "name": "subject", "value": "={{ $json.betreff }}" }, { "name": "body", "value": "={{ $json.antwort }}" } ] }, "options": { "timeout": 30000 } }, "id": "sendResponseOR", "name": "Antwort senden (OR)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1728, 112 ] }, { "parameters": { "method": "POST", "url": "http://192.:8767/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "to", "value": "={{ $json.absender }}" }, { "name": "subject", "value": "={{ $json.betreff }}" }, { "name": "body", "value": "={{ $json.antwort }}" } ] }, "options": { "timeout": 30000 } }, "id": "sendResponseHB", "name": "Antwort senden (HB)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1952, 400 ] } ], "connections": { "Email Trigger (IMAP)": { "main": [ [ { "node": "Filter + Route", "type": "main", "index": 0 } ] ] }, "Filter + Route": { "main": [ [ { "node": "IF Openrouter?", "type": "main", "index": 0 } ] ] }, "IF Openrouter?": { "main": [ [ { "node": "E-Mail aufbereiten (OR)", "type": "main", "index": 0 } ], [ { "node": "IF Helbardor?", "type": "main", "index": 0 } ] ] }, "IF Helbardor?": { "main": [ [ { "node": "E-Mail aufbereiten (HB)", "type": "main", "index": 0 } ], [] ] }, "E-Mail aufbereiten (OR)": { "main": [ [ { "node": "KI-Chat Agent", "type": "main", "index": 0 } ] ] }, "OpenRouter Chat Model": { "ailanguageModel": [ [ { "node": "KI-Chat Agent", "type": "ailanguageModel", "index": 0 } ] ] }, "KI-Chat Agent": { "main": [ [ { "node": "Antwort aufbereiten (OR)", "type": "main", "index": 0 } ] ] }, "Antwort aufbereiten (OR)": { "main": [ [ { "node": "Antwort senden (OR)", "type": "main", "index": 0 } ] ] }, "E-Mail aufbereiten (HB)": { "main": [ [ { "node": "Helbardor API", "type": "main", "index": 0 } ] ] }, "Helbardor API": { "main": [ [ { "node": "Antwort aufbereiten (HB)", "type": "main", "index": 0 } ] ] }, "Antwort aufbereiten (HB)": { "main": [ [ { "node": "Antwort senden (HB)", "type": "main", "index": 0 } ] ] } }, "settings": { "executionOrder": "v1", "binaryMode": "separate" }, "staticData": { "node:Email Trigger (IMAP)": {} }, "meta": null, "nodeGroups": [], "pinData": {}, "versionId": "1b3d76ea--fe6bca3a605b", "activeVersionId": "5ef73011-1043789cda", "versionCounter": 7, "triggerCount": 1, "sourceWorkflowId": null, "shared": [ { "updatedAt": "2026-07-27T08:06:55.781Z", "createdAt": "2026-07-27T08:06:55.781Z", "role": "workflow:owner", "workflowId": "qvMcrp", "projectId": "bB0GtHp", "project": { "updatedAt": "2026-07-08T14:24:52.436Z", "createdAt": "2026-07-08T14:00:31.026Z", "id": "bB0ktwGtHp", "name": "Achim Mertens ", "type": "personal", "icon": null, "description": null, "customTelemetryTags": [], "creatorId": "1c2f8b26-000f0849c06" } } ], "tags": [], "parentFolder": null, "activeVersion": { "updatedAt": "2026-07-27T11:22:23.507Z", "createdAt": "2026-07-27T11:22:23.507Z", "versionId": "5ef73011-d3d1043789cda", "workflowId": "qvMaCcrp", "nodes": [ { "parameters": { "options": { "customEmailConfig": "[\"UNSEEN\"]", "forceReconnect": 60, "trackLastMessageId": false } }, "id": "imapTrigger", "name": "Email Trigger (IMAP)", "type": "n8n-nodes-base.emailReadImap", "typeVersion": 2.1, "position": [ 250, 300 ], "credentials": { "imap": { "id": "0Qz4llWY", "name": "IMAP account" } } }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst subject = (item.subject || '').toLowerCase();\nconst from = (item.from || '').toLowerCase();\n\nconst allowedSenders = [\n '[email protected]',\n ];\n\nconst isAllowed = allowedSenders.some(s => from.includes(s));\nconst hasKiChat = subject.includes('ki-chat');\n\nif (!hasKiChat || !isAllowed) {\n return null;\n}\n\nlet route = 'openrouter';\nif (subject.includes('helbardor')) {\n route = 'helbardor';\n}\n\nreturn [{ json: {\n absender: item.from || 'Unbekannt',\n betreff: item.subject || 'Kein Betreff',\n inhalt: item.textPlain || item.html || '',\n route: route\n}}];" }, "id": "filterRoute", "name": "Filter + Route", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 500, 300 ] }, { "parameters": { "conditions": { "combinator": "or", "conditions": [ { "id": "o1", "leftValue": "={{ $json.route }}", "rightValue": "openrouter", "operator": { "type": "string", "operation": "equals" } } ], "options": { "caseSensitive": false, "typeValidation": "strict", "version": 3 } }, "options": {} }, "id": "ifOpenrouter", "name": "IF Openrouter?", "type": "n8n-nodes-base.if", "typeVersion": 2.3, "position": [ 750, 200 ] }, { "parameters": { "conditions": { "combinator": "or", "conditions": [ { "id": "h1", "leftValue": "={{ $json.route }}", "rightValue": "helbardor", "operator": { "type": "string", "operation": "equals" } } ], "options": { "caseSensitive": false, "typeValidation": "strict", "version": 3 } }, "options": {} }, "id": "ifHelbardor", "name": "IF Helbardor?", "type": "n8n-nodes-base.if", "typeVersion": 2.3, "position": [ 750, 400 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nreturn [{ json: {\n absender: item.absender || 'Unbekannt',\n betreff: item.betreff || 'Kein Betreff',\n inhalt: item.inhalt || ''\n}}];" }, "id": "prepareEmailOR", "name": "E-Mail aufbereiten (OR)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1000, 100 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nreturn [{ json: {\n absender: item.absender || 'Unbekannt',\n betreff: item.betreff || 'Kein Betreff',\n inhalt: item.inhalt || ''\n}}];" }, "id": "prepareEmailHB", "name": "E-Mail aufbereiten (HB)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1000, 500 ] }, { "parameters": {}, "id": "openrouter", "name": "OpenRouter Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter", "typeVersion": 1.1, "position": [ 1250, 0 ], "credentials": { "openRouterApi": { "id": "j2sguF0h", "name": "OpenRouter account" } } }, { "parameters": { "promptType": "define", "text": "=Du bist ein hilfreicher Assistent. Beantworte die folgende Nachricht des Nutzers ausführlich und auf Deutsch. Schreibe eine komplette, hilfreiche Antwort:\n\n{{ $json.inhalt }}", "options": {} }, "id": "agent", "name": "KI-Chat Agent", "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 1.3, "position": [ 1250, 100 ] }, { "parameters": { "method": "POST", "url": "http://192.:8768/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "text", "value": "={{ $json.inhalt }}" }, { "name": "absender", "value": "={{ $json.absender }}" } ] }, "options": { "timeout": 120000 } }, "id": "helbardorApi", "name": "Helbardor API", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1250, 500 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst output = item.output || item;\nlet antwort = '';\nif (typeof output === 'string') antwort = output;\nelse if (output.text) antwort = output.text;\nelse if (output.output) antwort = output.output;\nelse if (output.response) antwort = output.response;\nelse antwort = JSON.stringify(output);\n\nconst absender = $('E-Mail aufbereiten (OR)').first().json.absender || 'Unbekannt';\nconst origBetreff = $('E-Mail aufbereiten (OR)').first().json.betreff || 'KI-Chat';\n\nreturn [{ json: {\n antwort: antwort,\n absender: absender,\n betreff: 'Re: ' + origBetreff\n}}];" }, "id": "prepareResponseOR", "name": "Antwort aufbereiten (OR)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1500, 100 ] }, { "parameters": { "jsCode": "const item = $input.first().json;\nconst data = item.json || item;\nconst antwort = data.antwort || 'Keine Antwort erhalten.';\nconst absender = $('E-Mail aufbereiten (HB)').first().json.absender || 'Unbekannt';\nconst origBetreff = $('E-Mail aufbereiten (HB)').first().json.betreff || 'KI-Chat';\n\nreturn [{ json: {\n antwort: antwort,\n absender: absender,\n betreff: 'Re: ' + origBetreff\n}}];" }, "id": "prepareResponseHB", "name": "Antwort aufbereiten (HB)", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1500, 500 ] }, { "parameters": { "method": "POST", "url": "http://192.:8767/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "to", "value": "={{ $json.absender }}" }, { "name": "subject", "value": "={{ $json.betreff }}" }, { "name": "body", "value": "={{ $json.antwort }}" } ] }, "options": { "timeout": 30000 } }, "id": "sendResponseOR", "name": "Antwort senden (OR)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1750, 100 ] }, { "parameters": { "method": "POST", "url": "http://192.:8767/", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "to", "value": "={{ $json.absender }}" }, { "name": "subject", "value": "={{ $json.betreff }}" }, { "name": "body", "value": "={{ $json.antwort }}" } ] }, "options": { "timeout": 30000 } }, "id": "sendResponseHB", "name": "Antwort senden (HB)", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1750, 500 ] } ], "connections": { "Email Trigger (IMAP)": { "main": [ [ { "node": "Filter + Route", "type": "main", "index": 0 } ] ] }, "Filter + Route": { "main": [ [ { "node": "IF Openrouter?", "type": "main", "index": 0 } ] ] }, "IF Openrouter?": { "main": [ [ { "node": "E-Mail aufbereiten (OR)", "type": "main", "index": 0 } ], [ { "node": "IF Helbardor?", "type": "main", "index": 0 } ] ] }, "IF Helbardor?": { "main": [ [ { "node": "E-Mail aufbereiten (HB)", "type": "main", "index": 0 } ], [] ] }, "E-Mail aufbereiten (OR)": { "main": [ [ { "node": "KI-Chat Agent", "type": "main", "index": 0 } ] ] }, "OpenRouter Chat Model": { "ailanguageModel": [ [ { "node": "KI-Chat Agent", "type": "ailanguageModel", "index": 0 } ] ] }, "KI-Chat Agent": { "main": [ [ { "node": "Antwort aufbereiten (OR)", "type": "main", "index": 0 } ] ] }, "Antwort aufbereiten (OR)": { "main": [ [ { "node": "Antwort senden (OR)", "type": "main", "index": 0 } ] ] }, "E-Mail aufbereiten (HB)": { "main": [ [ { "node": "Helbardor API", "type": "main", "index": 0 } ] ] }, "Helbardor API": { "main": [ [ { "node": "Antwort aufbereiten (HB)", "type": "main", "index": 0 } ] ] }, "Antwort aufbereiten (HB)": { "main": [ [ { "node": "Antwort senden (HB)", "type": "main", "index": 0 } ] ] } }, "nodeGroups": [], "authors": "Achim Mertens", "name": null, "description": null, "autosaved": false, "workflowPublishHistory": [ { "createdAt": "2026-07-27T11:22:24.371Z", "id": 170, "workflowId": "qvMCcrp", "versionId": "5ef7301d1043789cda", "event": "activated", "userId": "1c2f8b26-0f0849c06" } ] }, "scopes": [ "execution:reveal", "workflow:create", "workflow:delete", "workflow:disableRedaction", "workflow:enableRedaction", "workflow:execute", "workflow:execute-chat", "workflow:export", "workflow:import", "workflow:list", "workflow:move", "workflow:publish", "workflow:read", "workflow:share", "workflow:unpublish", "workflow:unshare", "workflow:update" ], "checksum": "0c3e1322676db92dee96b6ca4aa7d19" }

Tags: #mail#ki#gateway#chatbot#doku#deutsch#n8n#openclaw#policy

View full post on HivePostify →

Join HivePostify — Pakistan's First Web3 Platform →