feat(email): round-trip test — send via SMTP to the IMAP mailbox and confirm arrival

- emailIntakeService.roundTripTest(): sends a uniquely-tagged email through the
  saved SMTP config to the IMAP mailbox (imap_user), then polls IMAP up to 30s
  for that subject token; deletes the test message on arrival so it never hits
  the accounting inbox. Returns {ok, seconds, recipient} or a typed reason.
- route POST /admin/email/incoming-config/roundtrip (email.send)
- IMAP card: 'Round-trip test' button beside 'Test connection' + Save; toast
  reports recipient + delivery time. Distinct reasons mapped (smtp/imap
  unconfigured, send_failed, not_received→504).
- en/de strings
This commit is contained in:
Luca
2026-06-12 14:52:14 +02:00
parent f017649bd5
commit 04be51a008
6 changed files with 134 additions and 4 deletions
+4
View File
@@ -2482,6 +2482,10 @@
"test": "Verbindung testen",
"testOk": "Verbunden mit {{folder}} {{messages}} Nachrichten, {{unseen}} ungelesen.",
"testFailed": "Verbindung fehlgeschlagen.",
"roundTrip": "Rundlauf-Test",
"roundTripHint": "Sendet über die SMTP-Einstellungen eine Test-E-Mail an dieses Postfach und prüft, ob sie ankommt. Beide vorher speichern.",
"roundTripOk": "Rundlauf OK an {{recipient}} zugestellt in {{seconds}}s.",
"roundTripFailed": "Rundlauf-Test fehlgeschlagen.",
"port": "Port",
"security": "Sicherheit",
"ssl": "SSL/TLS",
+4
View File
@@ -2055,6 +2055,10 @@
"test": "Test connection",
"testOk": "Connected to {{folder}} — {{messages}} messages, {{unseen}} unread.",
"testFailed": "Connection failed.",
"roundTrip": "Round-trip test",
"roundTripHint": "Sends a test email via your SMTP settings to this mailbox and confirms it arrives. Save both first.",
"roundTripOk": "Round-trip OK — delivered to {{recipient}} in {{seconds}}s.",
"roundTripFailed": "Round-trip test failed.",
"port": "Port",
"security": "Security",
"ssl": "SSL/TLS",