feat(email): add 'Test connection' to incoming mail + tidy IMAP label

- emailIntakeService.testConnection(): logs in, opens the configured folder,
  reports message/unread counts (non-destructive). Accepts current form creds
  so it works before saving; masked password falls back to stored.
- route POST /admin/email/incoming-config/test
- IMAP card: 'Test connection' button beside Save; toast shows folder + counts
- capitalize 'IMAP Host' label to match 'SMTP Host'

Note: incoming uses IMAP (receiving) vs outgoing SMTP (sending) — genuinely
different servers/credentials, hence the distinct field set (Folder; no From).
This commit is contained in:
Luca
2026-06-12 14:47:14 +02:00
parent d04a6978e9
commit f017649bd5
6 changed files with 104 additions and 6 deletions
+3
View File
@@ -2479,6 +2479,9 @@
"title": "Eingehende E-Mails (IMAP)",
"subtitle": "Ein dediziertes Postfach, jede Minute abgerufen; Anhänge landen in Buchhaltung → Eingangsrechnungen.",
"host": "IMAP-Host",
"test": "Verbindung testen",
"testOk": "Verbunden mit {{folder}} — {{messages}} Nachrichten, {{unseen}} ungelesen.",
"testFailed": "Verbindung fehlgeschlagen.",
"port": "Port",
"security": "Sicherheit",
"ssl": "SSL/TLS",
+4 -1
View File
@@ -2051,7 +2051,10 @@
"incoming": {
"title": "Incoming mail (IMAP)",
"subtitle": "A dedicated mailbox polled every minute; attachments land in Accounting → Incoming invoices.",
"host": "IMAP host",
"host": "IMAP Host",
"test": "Test connection",
"testOk": "Connected to {{folder}} — {{messages}} messages, {{unseen}} unread.",
"testFailed": "Connection failed.",
"port": "Port",
"security": "Security",
"ssl": "SSL/TLS",