fix(07): propagate Exchange connection error, add folder selection for Exchange
Tessera CI/CD / Lint & Type Check (push) Waiting to run
Tessera CI/CD / Tests (push) Blocked by required conditions
Tessera CI/CD / Build & Deploy (push) Blocked by required conditions

- testConnection now returns { success, message? } instead of boolean so
  admins see the actual EWS/IMAP error in the UI rather than "Unbekannter Fehler"
- Exchange provider: resolveFolder() maps folder string to WellKnownFolderName
  (Inbox, SentItems, DeletedItems, Drafts, JunkEmail + German aliases)
- InboxConfigForm: folder field now shown for both IMAP and Exchange protocols
  with Exchange-specific help text listing valid well-known names
- Controller returns testConnection result directly (no more redundant wrapping)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-29 09:33:13 +02:00
parent 01ff137f43
commit 9b453e3ed3
8 changed files with 68 additions and 49 deletions
@@ -303,22 +303,23 @@ export function InboxConfigForm() {
</div>
)}
{/* IMAP-only: Ordner */}
{form.protocol === 'imap' && (
<div>
<label htmlFor="dkv-folder" className={labelCls}>
{t('form.folder')} *
</label>
<input
id="dkv-folder"
type="text"
required
className={inputCls}
value={form.folder}
onChange={(e) => update('folder', e.target.value)}
/>
</div>
)}
{/* Ordner / Postfach */}
<div>
<label htmlFor="dkv-folder" className={labelCls}>
{t('form.folder')}
</label>
<input
id="dkv-folder"
type="text"
placeholder={form.protocol === 'exchange' ? 'Inbox' : 'INBOX'}
className={inputCls}
value={form.folder}
onChange={(e) => update('folder', e.target.value)}
/>
{form.protocol === 'exchange' && (
<p className="mt-1 text-xs text-muted-foreground">{t('form.folderExchangeHelp')}</p>
)}
</div>
{/* Exchange-only: Domain */}
{form.protocol === 'exchange' && (