*/ public static function all(): array { return [ 'verify-email' => ['label' => 'E-Mail bestätigen (Registrierung)', 'purpose' => MailPurpose::SYSTEM], 'reset-password' => ['label' => 'Passwort zurücksetzen', 'purpose' => MailPurpose::SYSTEM], 'order-confirmation' => ['label' => 'Bestellbestätigung', 'purpose' => MailPurpose::BILLING], 'cloud-ready' => ['label' => 'Cloud ist bereit (Zugangsdaten)', 'purpose' => MailPurpose::PROVISIONING], 'maintenance-announcement' => ['label' => 'Wartungsfenster angekündigt', 'purpose' => MailPurpose::MAINTENANCE], 'maintenance-cancelled' => ['label' => 'Wartungsfenster abgesagt', 'purpose' => MailPurpose::MAINTENANCE], 'invoice' => ['label' => 'Rechnung', 'purpose' => MailPurpose::BILLING], 'new-device' => ['label' => 'Anmeldung von einem neuen Gerät', 'purpose' => MailPurpose::SYSTEM], 'dormant-warning' => ['label' => 'Konto ohne Paket wird gelöscht', 'purpose' => MailPurpose::SYSTEM], 'operator-message' => ['label' => 'Nachricht aus der Konsole', 'purpose' => MailPurpose::SUPPORT], // Die sechs Texte des Mahnlaufs. Vorschaubar, weil sie die // unangenehmsten sind, die dieses Haus verschickt — und die // einzigen, die ein Kunde bekommt, wenn ohnehin gerade etwas // schiefläuft. Alle sechs aus dem BILLING-Postfach: eine Mahnung // ist immer eine Frage übers Geld. 'dunning-0' => ['label' => 'Zahlung fehlgeschlagen (Hinweis)', 'purpose' => MailPurpose::BILLING], 'dunning-1' => ['label' => 'Zahlungserinnerung (1. Mahnung)', 'purpose' => MailPurpose::BILLING], 'dunning-2' => ['label' => '2. Mahnung (mit Mahnspesen)', 'purpose' => MailPurpose::BILLING], 'dunning-3' => ['label' => '3. Mahnung (letzte vor Abschaltung)', 'purpose' => MailPurpose::BILLING], 'cloud-suspended' => ['label' => 'Cloud abgeschaltet', 'purpose' => MailPurpose::BILLING], 'cloud-resumed' => ['label' => 'Cloud läuft wieder', 'purpose' => MailPurpose::BILLING], // Sicherheit: die eine Meldung des Frühwarnsystems (BlockAddress). // EIN Eintrag, aber ZWEI Empfängerkreise — an den Inhaber, wenn // eine Adresse an seiner Instanz gesperrt wird, und an die // Betreiber mit `hosts.manage`, wenn es an einem Host passiert. // Beide Fälle tragen denselben Schlüssel, gehen also gemeinsam // dorthin, wohin die Wegwahl sie legt; welchen Text und welchen // Knopf sie bekommen, entscheidet SecurityBlockMail. 'security-block' => ['label' => 'Adresse wegen Anmeldeversuchen gesperrt', 'purpose' => MailPurpose::SYSTEM], ]; } public static function label(string $key): string { return self::all()[$key]['label'] ?? $key; } public static function purpose(string $key): string { return self::all()[$key]['purpose'] ?? MailPurpose::SYSTEM; } /** * Der Mailer dieser Mailart — also das SMTP-Konto, über das sie geht. * * Nicht `'cp_'.$purpose`, und das ist der ganze Punkt: die Wegwahl darf * nicht nur die Absenderzeile verschieben. Wer `security-block` auf `info@` * legt, will die Mail AUS `info@`, nicht mit `From: info@` durch die * Anmeldung von `no-reply@` — viele Server weisen genau das ab. `config/ * mail.php` erzeugt zu jedem Schlüssel dieser Liste einen Mailer mit * derselben `mail_key`, und `MailboxTransport` fragt damit dieselbe * `MailRoute`, die auch den Umschlag entscheidet. * * Ohne Eintrag in der Wegwahl fällt beides auf den Zweck zurück, das * Verhalten bleibt also unverändert. */ public static function mailer(string $key): string { // Ein Schlüssel, den diese Liste nicht kennt, bekommt den Mailer seines // Zwecks: config/mail.php erzeugt nur zu den Einträgen hier einen, und // Laravel würfe sonst "Mailer [...] is not defined" — die Mail ginge // dann gar nicht, statt wie zuvor aus dem Zweck-Postfach. return isset(self::all()[$key]) ? 'cp_mail_'.$key : 'cp_'.self::purpose($key); } }