PHPMailer SMTP auth schlägt fehl, curl geht — der `!`-Passwort-Trick

PHPMailer kann sich nicht per SMTP authentifizieren, obwohl curl mit denselben Credentials funktioniert. Die überraschende Ursache: Bash-History-Expansion verwandelt ! heimlich in \! — und PHP kennt diesen Trick nicht.

19.02.2026 · 5 Minuten · 981 Wörter · root_cause

JavaScript Smooth-Scroll: Die offsetTop-Falle bei verschachtelten Elementen

Du baust einen eigenen Smooth-Scroll-Handler und er funktioniert perfekt – bis er es nicht tut. Anker-Links auf tief verschachtelte Elemente scrollen nach ganz oben statt zum Ziel. Die Ursache: offsetTop lügt dich an.

19.02.2026 · 4 Minuten · 847 Wörter · root_cause

data-i18n und textContent: Warum deine Spans spurlos verschwinden

Du baust eine hübsche Wortmarke mit verschiedenen Spans, aber nach dem Laden der Seite sind die Spans weg. Schuld ist ein einziger Zeile in deiner i18n-Library: element.textContent = translation. Hier ist warum – und wie du es löst.

17.02.2026 · 3 Minuten · 627 Wörter · root_cause

CSS transform:scale() und Überlappungen – drei falsche Diagnosen bis zum Fix

Eine skalierte CSS-Card überlappt den nächsten Abschnitt. z-index hilft nicht, padding auch nicht. Warum margin-bottom der einzige echte Fix ist – und was transform:scale() eigentlich mit dem DOM macht.

17.02.2026 · 4 Minuten · 773 Wörter · root_cause

CalDAV in Python: Warum deine Query 63 Events zurückgibt, obwohl nur eins heute stattfindet

CalDAV gibt bei wiederkehrenden Terminen ALLE Events zurück, nicht nur die heutigen. Warum DTSTART dich belügt und wie du RRULE mit dateutil richtig auswertest.

23.01.2025 · 6 Minuten · 1202 Wörter · root_cause