Add email channel: IMAP IDLE inbound, SMTP outbound, thread matching

Inbound mail on support@top-sysops.ru creates/updates tickets in realtime
(IMAP IDLE, not polling). Replies thread via In-Reply-To/References against
stored Message-IDs, falling back to the customer's open ticket. Mailbox
credentials configured and encrypted via Settings -> Почта, same pattern as
the Telegram channel. TLS verification is opt-in-skippable per mailbox
(mail.top-sysops.ru's cert is currently expired; LAN-only server).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QcXH24ky6zjk2UyK5oZUPH
This commit is contained in:
ogrechkoandClaude Sonnet 5 committed 2026-07-26 13:01:21 +00:00
1 parent cf0b6cf58e
commit 7e62ed739b
18 files changed
+1739 -7

No files matched your search

+5
View File
@@ -18,8 +18,11 @@
"better-sqlite3": "^12.11.1",
"drizzle-orm": "^0.45.2",
"framer-motion": "^12.4.7",
"imapflow": "^1.5.0",
"lucide-react": "^0.545.0",
"mailparser": "^3.9.14",
"next": "16.2.12",
"nodemailer": "^9.0.3",
"react": "19.2.4",
"react-dom": "19.2.4",
"telegraf": "^4.16.3",
@@ -28,7 +31,9 @@
"devDependencies": {
"@tailwindcss/postcss": "^4.1.16",
"@types/better-sqlite3": "^7.6.13",
"@types/mailparser": "^3.4.6",
"@types/node": "^20",
"@types/nodemailer": "^8.0.1",
"@types/react": "^19",
"@types/react-dom": "^19",
"drizzle-kit": "^0.31.10",