humhub: Direktnachrichten senden (mail-send) #8

Merged
sko merged 2 commits from feat/humhub-mail into main 2026-09-16 06:32:10 +02:00
Owner

Ergänzt das humhub-Skill um mail-send. Die REST-API kann das Mail-Modul, das Skill bisher nicht — Direktnachrichten mussten von Hand in der Weboberfläche geschrieben werden.

./humhub.py mail-send <empfaenger> "<betreff>" [datei|-]

Empfänger als Benutzername, Profil-URL oder ID, mehrere mit Komma.

Der Stolperstein ist die Empfängerauflösung: Profil-Slug und Benutzername sind nicht dasselbe — zu /u/serge/ gehört der Benutzername Serge, und get-by-username unterscheidet Groß-/Kleinschreibung. Wer den Slug aus der URL nimmt, bekommt User not found!. resolve_user() probiert deshalb erst get-by-username und fällt dann auf einen Durchlauf der Benutzerliste zurück, der Benutzername und Slug ohne Rücksicht auf Groß-/Kleinschreibung vergleicht.

Bewusst kein Befehl zum Lesen von Konversationen: fremde Nachrichten gehören nicht ungefragt in einen Modellkontext.

Getestet gegen die Instanz: Versand per Benutzername und per Profil-URL, beides legt die Konversation an.

Analyse und Umsetzung mit Claude Code, Inhalt von mir geprüft und freigegeben.

Ergänzt das humhub-Skill um `mail-send`. Die REST-API kann das Mail-Modul, das Skill bisher nicht — Direktnachrichten mussten von Hand in der Weboberfläche geschrieben werden. ``` ./humhub.py mail-send <empfaenger> "<betreff>" [datei|-] ``` Empfänger als Benutzername, Profil-URL oder ID, mehrere mit Komma. Der Stolperstein ist die Empfängerauflösung: Profil-Slug und Benutzername sind nicht dasselbe — zu `/u/serge/` gehört der Benutzername `Serge`, und `get-by-username` unterscheidet Groß-/Kleinschreibung. Wer den Slug aus der URL nimmt, bekommt `User not found!`. `resolve_user()` probiert deshalb erst `get-by-username` und fällt dann auf einen Durchlauf der Benutzerliste zurück, der Benutzername und Slug ohne Rücksicht auf Groß-/Kleinschreibung vergleicht. Bewusst kein Befehl zum Lesen von Konversationen: fremde Nachrichten gehören nicht ungefragt in einen Modellkontext. Getestet gegen die Instanz: Versand per Benutzername und per Profil-URL, beides legt die Konversation an. *Analyse und Umsetzung mit Claude Code, Inhalt von mir geprüft und freigegeben.*
jhs added 1 commit 2026-09-11 08:57:28 +02:00
Die REST-API kann das Mail-Modul, das Skill bisher nicht — Direktnachrichten
mussten von Hand in der Weboberflaeche geschrieben werden.

Der Stolperstein ist die Empfaengeraufloesung: Profil-Slug und Benutzername
sind nicht dasselbe (zu /u/serge/ gehoert "Serge"), und get-by-username
unterscheidet Gross-/Kleinschreibung. resolve_user() nimmt deshalb ID,
Benutzername oder Profil-URL und faellt auf einen Durchlauf der Benutzerliste
zurueck, der beides case-insensitive vergleicht.

Kein Befehl zum Lesen von Konversationen: fremde Nachrichten gehoeren nicht
ungefragt in einen Modellkontext.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jhs added 1 commit 2026-09-12 08:24:24 +02:00
mail-send legt immer eine neue Konversation an; fuer eine Antwort braucht es
POST /mail/<id>/entry. Die ID steht in der URL der Konversation.

Holt den Verlauf nicht ab, sondern prueft nur die Erreichbarkeit — fremde
Nachrichten gehoeren nicht ungefragt in einen Modellkontext.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
sko merged commit 21d709afbd into main 2026-09-16 06:32:10 +02:00
Sign in to join this conversation.