Bezahlte Postfächer und Domain-Pakete auf mailcow mit eigenem Stripe-Konto verkaufen

Ein praktischer Leitfaden, wie du deine mailcow zum kleinen Hosted-Mail-Dienst machst: Postfachtarife und Domain-Pakete, Zusatzoptionen mit anteiliger Berechnung, Kulanzfrist und Sperrung, die nie ein Konto löscht.

Wenn du mailcow schon für dich selbst betreibst, hast du die gleiche Frage vermutlich schon mehr als einmal gehört: Könntest du auch Mail für jemand anderen hosten? Der technische Teil ist die leichtere Hälfte. Die schwierige Hälfte ist die Abrechnung: Wer ist in welchem Tarif, was passiert, wenn eine Karte fehlschlägt, und wie sperrst du ein Konto, ohne es zu zerstören?

Cashier for mailcow ist genau für diese Hälfte gebaut. Es verkauft Postfachtarife und Domain-Pakete auf deiner mailcow, monatlich oder jährlich per Karte über dein eigenes Stripe-Konto, und übernimmt jede Änderung in mailcow, sobald die Zahlung bestätigt ist. Unbezahlte Konten werden nach einer von dir gewählten Kulanzfrist gesperrt, nie gelöscht. Dieses Tutorial führt dich durch die Einrichtung als kleines Hosted-Mail-Geschäft.

Voraussetzungen

Bevor du loslegst, stelle sicher, dass du Folgendes hast:

  • Das mailcow Toolkit package 0.4.0 oder neuer auf mailcow-dockerized (Linux, docker compose, systemd). Cashier ist im Paket enthalten und wird mit install.sh als root auf dem Host installiert.
  • Sign-up for mailcow mit einer eigenen gültigen Lizenz, eingerichtet, denn kostenpflichtige Konten werden über dessen Registrierungsseite angelegt.
  • Einen Lizenzschlüssel für Cashier for mailcow (ein Schlüssel aus dem mailcow bundle funktioniert ebenfalls) oder eine E-Mail-Adresse für die kostenlose 30-Tage-Testphase.
  • Dein eigenes Stripe-Konto in einem Land, das Stripe unterstützt. Geld, Rechnungen und Kundendaten bleiben in deinem Konto; MediaLab Works ist nicht Partei deiner Verkäufe.
  • Die mailcow-UI, erreichbar aus dem Internet über HTTPS, damit Stripe den Webhook aufrufen kann, plus ausgehendes HTTPS zu api.stripe.com und medialab.works für die Lizenzprüfung.

Schritt 1 — Lizenz aktivieren

Öffne System > Updates (Toolkit) und suche die Karte License · Cashier for mailcow. Gib deinen Schlüssel ein und drücke Activate, oder starte die kostenlose 30-Tage-Testphase mit deiner E-Mail-Adresse. Auf der Shell geht dasselbe so:

docker compose exec -u www-data php-fpm-mailcow php /web/mlw-toolkit/cli.php activate mailcow-cashier <KEY>

Führe den Befehl aus dem mailcow-Ordner aus. Die Lizenz wird beim Start und einmal täglich geprüft; ohne Internet arbeitet Cashier nach der letzten erfolgreichen Prüfung noch 7 Tage weiter. Ohne gültige Lizenz startet kein neuer Checkout, aber Webhooks bestehender Abonnenten werden weiter verarbeitet und nichts wird gelöscht.

Schritt 2 — Stripe verbinden

Öffne System > Cashier und arbeite die Karte Stripe durch:

  1. Erstelle in deinem Stripe Dashboard einen eingeschränkten Schlüssel (Developers > API keys > Create restricted key) mit Schreibzugriff auf Customers, Checkout Sessions, Customer portal, Products, Prices, Subscriptions, Subscription items und Webhook Endpoints sowie Lesezugriff auf Invoices. Ein Secret Key funktioniert auch, aber ein eingeschränkter Schlüssel ist sicherer.
  2. Füge den Publishable key und den Secret / restricted key ein. Beide müssen Testschlüssel oder beide Live-Schlüssel sein; Cashier prüft sie mit Stripe und zeigt das Konto und den Modus an. Der Secret Key wird verschlüsselt gespeichert und nie wieder angezeigt, lass das Feld später also leer, um ihn zu behalten.
  3. Drücke Create the webhook. Cashier registriert https://<mail host>/mlw-cashier/webhook.php in deinem Stripe-Konto mit den benötigten Events und speichert das Signaturgeheimnis. Wenn ein Proxy den Hostnamen umschreibt, setze zuerst die Public webhook address unter Rules.
  4. Prüfe Last event, um zu bestätigen, dass Events tatsächlich ankommen.

Um später vom Test- in den Live-Modus zu wechseln, verbinde die Live-Schlüssel und lege den Webhook erneut an.

Schritt 3 — Tarife definieren

Drücke in Plans auf New plan. Wähle die Kind:

  • mailbox — ein Postfach mit seinem Kontingent, für Leute, die nur eine Adresse wollen.
  • domain package — für Domain-Administratoren: Domains (package), Mailboxes / domain, Aliases / domain, Quota (MB; package: per domain) und Default quota / mailbox (MB).

Fülle dann die Namen und Beschreibungen auf Englisch und Rumänisch aus (sie erscheinen auf der Registrierungsseite in der Sprache des Besuchers), einen monatlichen Preis und/oder einen jährlichen Preis in der Währung deines Stripe-Kontos sowie Testtage (0 = keine). Cashier legt das Produkt und die Preise für dich in deinem Stripe-Konto an. Lass Visible on the registration page für öffentliche Tarife angehakt; entferne das Häkchen für einen versteckten Tarif, der nur über seinen direkten Link (/mlw-signup/?plan=<token>) oder einen an den Tarif gebundenen Einladungscode erreichbar ist.

Edit ändert einen Tarif: Ein geänderter Betrag erzeugt einen neuen Preis in Stripe und deaktiviert den alten, den bestehende Abonnenten behalten. Archive nimmt einen Tarif aus dem Verkauf, ohne seine Abonnenten anzutasten.

Schritt 4 — Zusatzoptionen hinzufügen

Erstelle in Add-ons die Extras, die Kunden mit einer Mengenangabe kaufen können: zusätzliche Postfächer auf jeder Domain des Pakets oder zusätzlicher Speicher (MB pro Domain; bei einem Postfachtarif pro Postfach). Lege die Unit, die Namen, die monatlichen und jährlichen Preise und Visible fest. Kunden fügen sie unter My account hinzu; Stripe berechnet den Preis anteilig und die neuen Limits werden sofort auf mailcow angewendet.

Schritt 5 — Regeln festlegen: Kulanzfrist und Sperrung

Entscheide unter Rules, wie streng du sein willst:

  • Grace period after a failed payment (days, 0–90) — Standard sind 7 Tage, in denen das Konto weiter funktioniert, während der Kunde zahlt.
  • After the grace period the account is suspended — wähle no sign-in: mail is still received (der Standard) oder inactive: mailboxes, domain administrator and domains. Nichts wird je gelöscht, und eine Zahlung stellt das Konto sofort wieder her.
  • E-mail the subscribers about invoices and receipts.
  • Public webhook address (empty = automatic), Stripe product tax code und Stripe name prefix — letzteres ist wichtig, wenn mehrere mailcow-Server ein Stripe-Konto teilen.

Für ein kleines Hosting-Geschäft ist der Standardmodus „keine Anmeldung“ ein guter Ausgangspunkt: Ein säumiger Kunde kann den Dienst nicht mehr nutzen, aber E-Mails kommen weiter an, es geht also nichts verloren und eine Zahlung schaltet alles wieder ein.

Schritt 6 — Wissen, was Kunden sehen

Auf der Registrierungsseite wählt ein Besucher einen Tarif (monatlich oder jährlich), bestätigt seine Adresse und zahlt auf der Checkout-Seite von Stripe. Das Konto wird angelegt, wenn Stripe die Zahlung bestätigt. Unter My account sieht der Kunde den Tarif, das nächste Zahlungsdatum und die Zusatzoptionen, kann Change plan nutzen (anteilig berechnet; ein Paket, das kleiner als die aktuelle Nutzung ist, wird abgelehnt, mit dem Hinweis, was zuerst zu reduzieren ist) und Card, invoices and cancellation (Stripe) öffnen, das Kundenportal von Stripe.

Eine fehlgeschlagene Zahlung verschickt eine E-Mail mit dem Link zum Bezahlen und dem Sperrdatum. Ein gesperrter Kunde, der sich nicht anmelden kann, kann den Zahlungslink auf der öffentlichen Seite /mlw-cashier/billing.php anfordern, indem er die E-Mail-Adresse des Kontos eingibt. Eine Kündigung wird zum Ende des bezahlten Zeitraums wirksam, und ein durch das Abonnement angelegtes Konto bleibt danach gesperrt.

Schritt 7 — Die Admin-Seite betreiben

Subscribers listet jedes Abonnement mit seinem Status (aktiv, Kulanz, gesperrt, beendet), dem Tarif, dem Betrag, dem Link zu Stripe und dem Monthly revenue, dazu die Recent Stripe events, die der Webhook empfangen hat. Grant a plan for free gibt einem Konto für eine Anzahl von Tagen einen Tarif ohne Stripe, und eine Freischaltung kann vorzeitig beendet werden — praktisch zum Testen oder als Gefallen für einen Freund.

Tarife, Kunden und Abonnements liegen in der Datenbank von mailcow (Tabellen mlw_ca_*) und sind damit Teil der mailcow-Backups. Die Schlüssel und das Webhook-Geheimnis liegen im gemeinsamen Ordner des Toolkits, verschlüsselt mit AES-256-GCM, wobei der Verschlüsselungsschlüssel getrennt im redis von mailcow aufbewahrt wird.

Tipps und Fehlerbehebung

  • Webhook kommt nicht an? Prüfe Last event in der Stripe-Karte. Wenn ein Reverse Proxy den Hostnamen umschreibt, setze die Public webhook address unter Rules und lege den Webhook erneut an.
  • Schlüssel abgelehnt? Stelle sicher, dass beide Schlüssel Test- oder beide Live-Schlüssel sind; eine Mischung lässt die Prüfung scheitern.
  • Kunde will einen kleineren Tarif, aber er wird abgelehnt. Das ist Absicht: Es wird nichts gelöscht, damit er passt. Bitte den Kunden, zuerst Postfächer oder Speicher zu entfernen.
  • Ein wiederholtes Stripe-Event. Events werden per Signatur geprüft und einmal verarbeitet, ein Duplikat ändert also nichts.
  • Lizenzprüfung schlägt fehl. Der Server muss medialab.works über HTTPS erreichen; Cashier arbeitet nach der letzten erfolgreichen Prüfung noch 7 Tage weiter.
  • Serverumzug. uninstall.sh entfernt Cashier mit dem Toolkit, behält aber die Tabellen und jedes Konto; die verschlüsselten Schlüssel gehen mit dem gemeinsamen Ordner mit, plane danach also ein erneutes Verbinden von Stripe ein.

Fazit

Cashier for mailcow versucht nicht, eine vollständige Abrechnungsplattform zu sein. Es erledigt eine Aufgabe gut: Postfächer und Domain-Pakete auf deiner eigenen mailcow verkaufen, über dein eigenes Stripe-Konto, mit anteilig berechneten Änderungen, einer Kulanzfrist, die du kontrollierst, und einer Sperrung, die nie Daten löscht. Lies die user guide für jedes Feld, prüfe das changelog vor dem Update und nutze die knowledge base oder die FAQ, wenn etwas unklar ist. Fragen zu deinem Setup sind über contact willkommen.

Dieser Beitrag wurde mit KI-Unterstützung auf Grundlage unserer Produktdokumentation oder der aufgeführten Quellen verfasst und vor der Veröffentlichung automatisch geprüft.

Als Nächstes lesen

Du betreibst Emby, Jellyfin oder Nextcloud?

Unsere Plugins und Apps bringen Live-TV, Untertitel, Registrierung und Sicherheit auf deinen eigenen Server, mit kostenlosem Testzeitraum.