fix: E-Mail-Probleme (Bugs #1-#7) #1

Merged
ppfeiffer merged 2 commits from investigate/issues into main 2026-03-12 07:04:35 +01:00
Owner

Zusammenfassung

Untersuchung und Behebung aller gefundenen E-Mail-Probleme im Vergleich mit MeshDD-Bot.

Vollständige Analyse: docs/investigate/email-issues.md


Behobene Bugs

Bug #1 KRITISCH – SMTP-Einstellungen waren nicht speicherbar

Bisher gab es weder eine API noch ein Formular um SMTP zu konfigurieren.
Konfiguration war nur durch manuelles Editieren der config.ini möglich.

Fix:

  • GET /api/settings/users – liefert aktuelle [Web_Viewer] SMTP + Auth-Einstellungen (Passwort nur als smtp_password_set-Flag)
  • POST /api/settings/users – speichert alle Felder in config.ini
  • settings_users.html – neue SMTP-Konfigurationskarte mit Sofort-Speichern

Bug #2 – Falscher localhost-Fallback

_smtp_config() gab 'localhost' zurück wenn kein Host konfiguriert war.
Guard if not smtp['host'] griff nicht -> blindes Timeout statt klarer Fehlermeldung.

Fix: Fallback von 'localhost' auf ''


Bug #3 – OTP-Code im E-Mail-Betreff (Sicherheit)

Betreff war "[Bot] Registrierungscode: 123456" – Push-Notifications und SMTP-Logs
zeigten den Code ohne E-Mail zu öffnen.

Fix: Betreff neutral, Code nur noch im Body (wie MeshDD-Bot)


Bug #4 – register_resend ignorierte Sendefehler

Rückgabewert von _send_email() wurde verworfen.
Bei SMTP-Fehler wurde trotzdem resent=1 gesetzt.

Fix: Rückgabewert wird geprüft, bei Fehler Redirect mit resend_error=1


Bug #5 – Inkonsistente E-Mail-Validierung an 3 Stellen

Drei unterschiedliche Validierungen an drei Stellen im Code.

Fix: Neue statische Methode _validate_email(address) mit re.match,
alle drei Stellen nutzen sie einheitlich.


Bug #6 – Kein E-Mail-Logging

MeshDD-Bot loggt jeden Sendeversuch in eine email_logs-Tabelle.

Fix:

  • Neue Tabelle web_email_logs (id, recipient, subject, status, error_message, created_at)
  • Neue Methode _log_email()
  • _send_email() loggt sent / error / skipped

Bug #7 – MIMEMultipart ohne HTML-Part

_send_email() verwendete MIMEMultipart('alternative') auch für reine Plaintext-Mails.

Fix: _send_email() nimmt optionalen html_body-Parameter;
ohne HTML direktes MIMEText, mit HTML korrektes MIMEMultipart.


Geänderte Dateien

  • modules/web_viewer/app.py – alle Fixes
  • modules/web_viewer/templates/settings_users.html – SMTP-Formular
  • docs/investigate/email-issues.md – Analysedokument
## Zusammenfassung Untersuchung und Behebung aller gefundenen E-Mail-Probleme im Vergleich mit MeshDD-Bot. Vollständige Analyse: `docs/investigate/email-issues.md` --- ## Behobene Bugs ### Bug #1 KRITISCH – SMTP-Einstellungen waren nicht speicherbar Bisher gab es weder eine API noch ein Formular um SMTP zu konfigurieren. Konfiguration war nur durch manuelles Editieren der `config.ini` möglich. **Fix:** - `GET /api/settings/users` – liefert aktuelle `[Web_Viewer]` SMTP + Auth-Einstellungen (Passwort nur als `smtp_password_set`-Flag) - `POST /api/settings/users` – speichert alle Felder in `config.ini` - `settings_users.html` – neue SMTP-Konfigurationskarte mit Sofort-Speichern --- ### Bug #2 – Falscher localhost-Fallback `_smtp_config()` gab `'localhost'` zurück wenn kein Host konfiguriert war. Guard `if not smtp['host']` griff nicht -> blindes Timeout statt klarer Fehlermeldung. **Fix:** Fallback von `'localhost'` auf `''` --- ### Bug #3 – OTP-Code im E-Mail-Betreff (Sicherheit) Betreff war `"[Bot] Registrierungscode: 123456"` – Push-Notifications und SMTP-Logs zeigten den Code ohne E-Mail zu öffnen. **Fix:** Betreff neutral, Code nur noch im Body (wie MeshDD-Bot) --- ### Bug #4 – register_resend ignorierte Sendefehler Rückgabewert von `_send_email()` wurde verworfen. Bei SMTP-Fehler wurde trotzdem `resent=1` gesetzt. **Fix:** Rückgabewert wird geprüft, bei Fehler Redirect mit `resend_error=1` --- ### Bug #5 – Inkonsistente E-Mail-Validierung an 3 Stellen Drei unterschiedliche Validierungen an drei Stellen im Code. **Fix:** Neue statische Methode `_validate_email(address)` mit `re.match`, alle drei Stellen nutzen sie einheitlich. --- ### Bug #6 – Kein E-Mail-Logging MeshDD-Bot loggt jeden Sendeversuch in eine `email_logs`-Tabelle. **Fix:** - Neue Tabelle `web_email_logs` (id, recipient, subject, status, error_message, created_at) - Neue Methode `_log_email()` - `_send_email()` loggt `sent` / `error` / `skipped` --- ### Bug #7 – MIMEMultipart ohne HTML-Part `_send_email()` verwendete `MIMEMultipart('alternative')` auch für reine Plaintext-Mails. **Fix:** `_send_email()` nimmt optionalen `html_body`-Parameter; ohne HTML direktes `MIMEText`, mit HTML korrektes `MIMEMultipart`. --- ## Geänderte Dateien - `modules/web_viewer/app.py` – alle Fixes - `modules/web_viewer/templates/settings_users.html` – SMTP-Formular - `docs/investigate/email-issues.md` – Analysedokument
Bug #1 – KRITISCH: SMTP-Einstellungen nicht speicherbar
- GET  /api/settings/users: liefert [Web_Viewer] SMTP + Auth-Keys
  (Passwort nur als smtp_password_set-Flag, nie im Klartext)
- POST /api/settings/users: speichert alle Web_Viewer-Felder in config.ini
  inkl. clear_password-Flag um Passwort zu löschen
- settings_users.html: neue SMTP-Konfigurationskarte mit sofort-Speichern
  (Debounce 400ms, Spinner, Fehler-Alert, PW-Badge)

Bug #2 – Falscher localhost-Fallback in _smtp_config()
- fallback='localhost' → fallback='' damit Guard if not smtp['host']
  korrekt greift wenn kein SMTP konfiguriert

Bug #3 – OTP-Code im E-Mail-Betreff (Sicherheit)
- /register:         Betreff '[{site}] Dein Bestätigungscode'
- /register/resend:  Betreff '[{site}] Neuer Bestätigungscode'
  (Code nur noch im Body)

Bug #4 – register_resend ignoriert Sendefehler
- Rückgabewert (ok, err) wird jetzt ausgewertet
- Bei Fehler: redirect auf /register/verify?resend_error=1
  statt stillschweigendem Erfolg

Bug #5 – Inkonsistente E-Mail-Validierung an 3 Stellen
- Neue statische Methode _validate_email(address) mit re.match
  Muster: ^[^@\s]+@[^@\s]+\.[^@\s]+$
- Alle 3 Stellen (register, resend, test-email) nutzen jetzt
  einheitlich _validate_email()

Bug #6 (dokumentiert, kein Fix in diesem Commit)
- email_logs-Tabelle analog MeshDD-Bot: TODO in Folge-Commit

Bug #7 – MIMEMultipart('alternative') ohne HTML-Part
- _send_email() nimmt jetzt optionalen html_body-Parameter
- plain-only: direkt MIMEText (kein Multipart-Wrapper)
- mit html_body: MIMEMultipart('alternative') + beide Parts

Analyse: docs/investigate/email-issues.md
fix: E-Mail-Logging in DB (Bug #6)
Some checks failed
Build and Push Docker Image / build (pull_request) Failing after 39s
Tests / test (pull_request) Failing after 21s
b041891078
- web_email_logs Tabelle in DB-Schema ergänzt:
  id, recipient, subject, status, error_message, created_at
- _log_email(recipient, subject, status, error=None) Methode
- _send_email() loggt alle drei Zustände:
  'sent'    – erfolgreich versendet
  'error'   – SMTP-Fehler (inkl. Fehlermeldung)
  'skipped' – SMTP-Host nicht konfiguriert
- Analog zu MeshDD-Bot email_logs
ppfeiffer referenced this pull request from a commit 2026-03-12 07:04:35 +01:00
ppfeiffer referenced this pull request from a commit 2026-03-12 07:05:28 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ppfeiffer/meshcore-bot!1
No description provided.