feat/smtp-nur-aus-konto #6

Merged
hru merged 3 commits from feat/smtp-nur-aus-konto into main 2026-07-28 21:06:04 +00:00
Owner
No description provided.
Der Versand fiel bisher auf einen globalen Flask-Mail-Absender zurück, sobald
im Konto kein SMTP-Server hinterlegt war. Das war eine zweite, ungepflegte
Konfigurationsquelle: ohne MAIL_* in der .env lief der Versuch stumm gegen
localhost:587, mit MAIL_* verschickte VMS Mails unter einer Adresse, die der
handelnde Nutzer nie gesetzt hatte.

Jetzt gibt es genau eine Quelle. Fehlt der Zugang, wird nicht versendet — die
Antwort nennt die Einstellungen als Abhilfe, statt einen Verbindungsfehler zu
localhost zu zeigen.

Neu: vms/infra/mailer.py. build_smtp_credentials ist rein (Einstellungen und
Entschlüsselung kommen als Argumente) und ohne App-Kontext testbar; send_email
ist die einzige Stelle, die smtplib berührt. Ein unlesbares Passwort bekommt
eine eigene Ausnahme — die Ursache ist eine andere als "nie eingetragen", und
wer das nicht unterscheidet, sucht im Formular nach einem Wert, der drinsteht.

auth.py schrumpft dadurch um 125 Zeilen (650 -> 525); die beiden fast
wortgleichen Versandfunktionen teilen sich jetzt einen Helfer.

Entfernt: flask-mail als Abhängigkeit, die MAIL_*-Konfiguration in app.py,
MAIL_PASSWORD aus der KMS-Provisionierung (entrypoint.sh, kms_setup.py) und die
mailbox-Fixture. MAIL_SERVER/MAIL_PORT bleiben — sie belegen die SMTP-Felder
der Einstellungsseite vor (settings.py:222-223) und sind kein Versandweg.

Spec: docs/specs/smtp-nur-aus-kontoeinstellungen.md
Tests: 12 neue (test_mailer.py, test_auth_mail.py), mailer.py 100 % Branch-
Coverage, drei bestehende Tests auf die fake_smtp-Fixture umgestellt.
Suite: 831 passed, Gesamtabdeckung 90 % -> 92 %.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Vorbelegung des SMTP-Formulars hieß MAIL_SERVER/MAIL_PORT, obwohl die
Felder dahinter smtp_server/smtp_port sind — und obwohl die übrigen MAIL_*
mit diesem Umbau ihre Bedeutung verloren haben. Der alte Name hätte nahegelegt,
dass hier noch ein Versandweg konfiguriert wird.

Die Umbenennung erfordert eine Anpassung bestehender .env-Dateien; da ohnehin
neu deployt wird, ist der Zeitpunkt der günstigste.

Drei Tests decken das Verhalten jetzt ab, das vorher ungetestet war: die
Vorbelegung greift, der alte Name bewirkt nichts mehr, und ein im Konto
hinterlegter Server sticht den Vorschlag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Zusicherung suchte nur "Einstellungen" im HTML — das Wort steht aber
ohnehin in Sidebar und Navbar. Der Test wäre also auch dann grün gewesen, wenn
gar keine Fehlermeldung erschienen wäre. Jetzt wird der tatsächliche Text
geprüft; gegengeprobt mit konfiguriertem SMTP-Zugang, wo er fehlschlägt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hru merged commit a89b7b9f0b into main 2026-07-28 21:06:04 +00: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
hru/VMS!6
No description provided.