Skip to content

Marque blanche ​

Une instance Mankomail peut porter une autre marque que la sienne : votre nom, vos logos, vos couleurs. Deux façons de la régler.

  • Auto-hébergée : des variables d’environnement (BRAND_*), lues au démarrage.
  • Reliée à un control plane (une flotte d’instances opérées ensemble) : la marque configurée dans le back-office du control plane, reçue par l’instance et appliquée sans redémarrage.

Quand les deux existent, le control plane l’emporte champ par champ : un champ qu’il ne définit pas garde la valeur de l’environnement, sinon le défaut du produit.

Où la marque apparaît ​

ÉlémentOù il apparaîtDéfaut
NomColonne de navigation, pages de connexion et d’invitation, titre de l’onglet, e-mails systèmeMankomail
Logo (clair, sombre)Colonne de navigation, page de connexion. Un logo remplace le monogramme et le texte du nom à côtéLe monogramme
FaviconOnglet du navigateurLe monogramme, dessiné dans la couleur principale quand il y en a une
Couleur principaleL’accent du thème : boutons primaires, item de navigation actif, liens, anneau de focusL’accent du thème
Couleur d’accentPanneau de la page de connexion—
Lien d’aidePage de connexion, menu du membre, bandeau de suspensionAucun
« Propulsé par Mankomail »Page de connexion, e-mails système. Affiché seulement quand le nom de la marque diffère de celui du produitAffiché
Texte et image de la connexionSous-titre et panneau gauche de la page de connexionLe texte du produit, sans image
Nom d’expéditeur et pied des e-mailsE-mails de demande d’approbationLe nom de la marque, sans pied
Domaine personnaliséLiens générés dans les e-mails (boutons d’approbation, liens d’invitation)PUBLIC_BASE_URL

Les trois dernières lignes ne se règlent que depuis un control plane.

Des couleurs qui restent lisibles ​

Une couleur de marque n’est pas toujours lisible comme couleur d’interface : un bordeaux convient sur une page claire et devient illisible sur une page sombre, un jaune pâle l’inverse. L’instance garde la teinte de la couleur principale et recalcule sa clarté pour chacun des trois thèmes, en mode clair et en mode sombre, pour que le texte dans la couleur d’accent reste à 4,5:1 sur la page, que les libellés des boutons restent lisibles et que l’anneau de focus reste visible. La couleur affichée peut donc être un peu plus claire ou plus foncée que celle que vous avez choisie.

Les couleurs calculées sont gardées par le navigateur : au chargement suivant, elles s’affichent dès la première image.

Auto-hébergée : les variables d’environnement ​

Posez les variables dans .env, puis recréez le conteneur applicatif :

bash
BRAND_NAME="Acme Mail"
BRAND_LOGO_URL=https://cdn.acme.example/logo.svg
BRAND_LOGO_DARK_URL=https://cdn.acme.example/logo-dark.svg
BRAND_FAVICON_URL=https://cdn.acme.example/favicon.png
BRAND_PRIMARY_COLOR=#7A1F35
BRAND_ACCENT_COLOR=#FFE680
BRAND_SUPPORT_URL=https://help.acme.example
BRAND_HIDE_POWERED_BY=false
bash
docker compose -f compose.reference.yaml up -d app
  • Les images doivent être joignables par les navigateurs des utilisateurs. Utilisez des URL https : la politique de sécurité de la page autorise les images https:, plus l’origine exacte d’une URL http: posée dans ces variables.
  • Une valeur invalide (une couleur qui n’est pas #RRGGBB, une URL mal formée) est ignorée avec une ligne configuration: dans le journal de démarrage ; le défaut s’applique.

La liste complète est dans Variables d’environnement.

Reliée à un control plane ​

Un control plane est un service à part qui opère une flotte d’instances (une par organisation cliente) : il reçoit leur usage, leur envoie leur marque, leur plan et leurs droits, et peut les suspendre. L’instance ne fait que des appels HTTPS sortants ; rien ne s’y connecte jamais.

La liaison n’est active que si les trois variables sont posées ensemble :

bash
CONTROL_PLANE_URL=https://api.example.com/api/instances/v1
CONTROL_PLANE_INSTANCE_ID=ins_01k6x…
CONTROL_PLANE_SECRET_FILE=/run/secrets/control_plane_secret

Sans elles, l’instance n’appelle rien et n’envoie rien nulle part. Si une ou deux seulement sont posées, la liaison reste coupée et le journal de démarrage nomme celle qui manque.

Ce que l’instance envoie et reçoit ​

Chaque appel est signé avec le secret partagé (HMAC-SHA256 sur la méthode, le chemin, l’horodatage, un nonce à usage unique et le corps). L’horloge de la machine doit être à moins de cinq minutes de l’heure réelle : faites tourner NTP.

AppelFréquenceContenu
HeartbeatChaque minuteVersion et santé : base, migrations en attente, retard de la file de tâches, boîtes en erreur
UsageToutes les cinq minutesTotaux par heure : exécutions et étapes par statut final, mails reçus et envoyés par fournisseur, boîtes connectées, membres actifs (venus dans les 30 derniers jours), jetons et coût d’IA par fournisseur et modèle, stockage, appels d’API
ConfigurationToutes les cinq minutes, et dès que le heartbeat annonce un changementMarque, plan, droits, état de l’instance

L’usage est compté depuis la base de l’instance. Il ne contient aucun contenu de mail, aucune adresse et aucun sujet : seulement des nombres.

Quand le control plane est injoignable ​

L’instance continue de fonctionner :

  • la dernière configuration valide reste appliquée (elle est gardée en base) ;
  • les appels en échec sont réessayés avec un délai croissant, jusqu’à 30 minutes ;
  • les heures d’usage non acquittées restent en file et partent au retour de la liaison, les plus anciennes d’abord. Chaque heure est remontée comme un total qui remplace le précédent : l’envoyer deux fois ne la compte jamais deux fois.

Suspension ​

Quand le control plane suspend l’instance, elle passe en lecture seule :

  • chaque utilisateur voit un bandeau rouge qui explique la situation, avec le lien d’aide s’il existe ;
  • l’API refuse les modifications avec l’erreur instance.suspended (se connecter et se déconnecter restent possibles) ;
  • les webhooks entrants reçoivent 503 avec Retry-After, pour que l’émetteur les rejoue plus tard au lieu de les perdre ;
  • les workflows, la synchronisation et les envois sont en pause. Rien n’est perdu : les tâches restent en file et reprennent à la levée de la suspension.

Plan et droits ​

Le plan et les droits reçus sont visibles des administrateurs et lisibles par l’instance, mais ne brident encore aucune fonctionnalité. Les quotas posés par variables d’environnement continuent de s’appliquer.

Vérifier le résultat ​

Administration › Instance (administrateurs seulement) montre :

  • si la liaison est configurée, l’état annoncé et, pour chaque appel, son dernier succès et sa dernière erreur, en clair ;
  • le nombre d’heures d’usage en attente d’envoi ;
  • le plan et les droits reçus ;
  • chaque champ de marque avec sa valeur et son origine (control plane, environnement, défaut) et, pour ceux réglés par l’environnement, la variable à modifier.

Rien n’est modifiable sur cette page : la marque se change dans le back-office du control plane, ou dans les variables d’environnement suivies d’un redémarrage.