Roundcube ist mein Webmail. Kalender, Aufgaben und Adressbücher brachte es lange nicht mit; dafür gibt es Erweiterungen, aber viele hängen an einer festen Umgebung oder ziehen einen halben PHP-Stack mit. Ich habe zwei Plugins geschrieben, die genau das tun, was ich brauche, und nichts darüber hinaus.
Kalender, Aufgaben und Kontakte aus jedem CalDAV-Server
roundcube_caldav_suite ist ein Client für CalDAV und CardDAV. Es verbindet sich mit jedem Server, der diese Standards spricht - Radicale, Baïkal, Nextcloud, iCloud, Google - und holt von dort Kalender, Aufgabenlisten und Adressbücher.


Was drin ist:
- Kalender: Monats-, Wochen-, Tages- und Listenansicht, mehrere Kalender mit Farben, Termine anlegen, ändern und löschen, Wiederholungen (RRULE), Erinnerungen (VALARM), Kategorien, ganztägige Termine und Zeitzonen. Die Listenansicht lädt beim Scrollen weitere Zeiträume nach.
- Aufgaben: VTODO-Listen mit Anlegen, Ändern, Abschließen und Löschen, dazu Priorität, Fälligkeit, Startzeitpunkt, Fortschritt, Kategorien und Wiederholung.
- Kontakte: Das CardDAV-Adressbuch erscheint als Roundcube-Adressbuch mit Namensteilen, mehreren E-Mail-Adressen, Telefonnummern, Adressen und URLs. Es erscheint auch in der Empfänger-Vervollständigung beim Schreiben einer Mail.
- Einladungen: Termineinladungen in Mails zeigen Annehmen, Vielleicht und Ablehnen sowie “neue Zeit vorschlagen”. Annehmen schreibt den Termin in den Kalender und schickt eine Antwort nach iTIP an den Organisator.
- Einrichten: Eine Server-URL genügt, Kalender, Aufgabenlisten und Adressbücher werden gefunden.


Zwei Eigenschaften waren mir wichtig.
Beim Bearbeiten werden nur die Felder angefasst, die ich geändert habe. Was das
Formular nicht kennt - RRULE, ATTENDEE, ORGANIZER, EXDATE, eigene
X-Eigenschaften - bleibt erhalten, statt beim Speichern zu verschwinden.
Barrierefreiheit ist Teil des Baus, nicht nachgereicht: Tastaturnavigation, ARIA-Beschriftungen, semantisches HTML, eine durchgängig zugängliche Listenansicht, ein Sprunglink zum Kalender und eine Ladeanzeige, die angekündigt wird. Die Kalender- und Aufgabenlisten nutzen die nativen Roundcube-Listensemantiken: Auswahl per Klick, Bearbeiten per Eingabetaste oder Doppelklick.
Optional gibt es eine Ortssuche mit Photon (Standard, ohne Schlüssel), Nominatim oder Google Places. Bei Google läuft der Aufruf über einen serverseitigen Proxy, der Schlüssel bleibt also auf dem Server.
Vorausgesetzt werden PHP 8.1 oder neuer und Roundcube 1.6 oder neuer. Das
Plugin-Verzeichnis muss caldav_suite heißen.
Installation - ein Weg genügt:
cd /path/to/roundcube
composer require slohmaier/roundcube_caldav_suite
Alternativ das Release-Zip entpacken oder das Repository klonen. Danach
caldav_suite in $config['plugins'] eintragen.
Nur der Mailtext dunkel
roundcube-mailbody_dark löst ein kleineres Problem: Viele Newsletter sind hell gestaltet und im dunklen Roundcube-Theme blendend. DarkReader im Browser hilft, färbt aber die ganze Seite um.
Dieses Plugin lädt DarkReader in den Vorschaurahmen der Nachricht und schaltet ihn dort ein. Gefärbt wird nur der Mailinhalt; Ordnerliste, Werkzeugleiste und Kopfzeilen bleiben, wie das Theme sie vorgibt.



- Eine Schaltfläche in der Mail-Werkzeugleiste schaltet Off, Dark und Light durch. Die Wahl wird pro Browser gemerkt und gilt für jede geöffnete Nachricht.
- Unter Einstellungen, Nachrichtenansicht, “Dark mode for mail content” steht der Standardmodus (Off, Dark, Light, Auto, System) und die Feinabstimmung: Helligkeit, Kontrast, Graustufen, Sepia.
- “System” folgt der Einstellung des Betriebssystems und reagiert live darauf.
- Getestet mit Roundcube 1.7.1 und dem Elastic-Skin.

Installation:
composer require slohmaier/mailbody_dark
Danach mailbody_dark in $config['plugins'] eintragen und Roundcube mit einem
harten Reload neu laden (Ctrl+Shift+R), damit das neue JavaScript geladen wird.
Ein Mond-Symbol erscheint in der Werkzeugleiste.
DarkReader liegt bei, Version 4.9.109, MIT-Lizenz, © Alexander Shutau und Mitwirkende.
Lizenz und Bezug
Beide Plugins stehen unter GPL-3.0-or-later und liegen auf GitHub und Packagist:
Fehler und Wünsche gehören in die Issues des jeweiligen Repositories.