Aller au contenu
Aubui · Mails
Modèles & états

MailsNouveau

Un seul modèle pour tous les mails d’AUBOTA : la mise en forme du mail de partage de Share (fond nuit, carte, bouton bleu), un pied qui dit toujours pourquoi on reçoit le mail et comment ne plus le recevoir. Côté serveur, une classe : AubotaMail.

Aperçu

Ce sont les vrais mails, rendus à l’instant par la classe du serveur. Le pied change selon la sorte du mail.

Invitation vers une adresse sans compte (Share)
Version texte (toujours envoyée avec)
AUBOTA Share
Un fichier t’attend
===================

Camille Martin t’a envoyé un document via AUBOTA.

Fichier : rapport-annuel-2026.pdf

Lien temporaire · ouverture sécurisée · pas besoin de compte pour consulter.

Ouvrir le partage : https://share.aubota.xyz/AbCdEf1234

-- 
Tu reçois ce mail parce que Camille Martin a saisi ton adresse pour t’inviter. C’est le seul mail que tu recevras pour cette invitation, sans publicité : ton adresse ne sert qu’à elle.
Ne plus recevoir d’invitations par AUBOTA : https://settings.aubota.xyz/mails/exemple
AUBOTA Share · https://aubota.xyz
Notification vers un compte (Réunions)
Version texte (toujours envoyée avec)
AUBOTA Réunions
Tu es invité(e) à une réunion
=============================

Bonjour Alex,

Camille Martin t’invite à une réunion vidéo sur AUBOTA, dans ton navigateur : rien à installer.

Réunion : Point du lundi
Quand : 03/11/2026 à 09:30
Mot de passe : aucun

Rejoindre la réunion : https://hub.aubota.xyz/meetings/abc123

-- 
Tu reçois ce mail parce que tu as choisi d’être prévenu par e-mail. Tu retrouves aussi tout dans Comlink (la cloche).
Ne plus être prévenu par e-mail : https://settings.aubota.xyz/mails/exemple
Tes choix : https://settings.aubota.xyz/choix/
AUBOTA Réunions · https://aubota.xyz
Transactionnel (mot de passe oublié)
Version texte (toujours envoyée avec)
AUBOTA
Choisis un nouveau mot de passe
===============================

Salut Alex,

Tu as demandé à réinitialiser ton mot de passe sur AUBOTA. Le bouton ci-dessous t’emmène choisir le nouveau.

Attention : ce lien n’est valable que 30 minutes.

Réinitialiser mon mot de passe : https://auth.aubota.xyz/reset

-- 
Tu reçois ce mail parce qu’une réinitialisation de mot de passe a été demandée pour le compte AUBOTA lié à cette adresse.
Si tu n’es pas à l’origine de cette demande, ignore ce mail : rien ne change.
AUBOTA · https://aubota.xyz
Nouveautés et conseils (Administration › Mails)
Version texte (toujours envoyée avec)
AUBOTA
Les nouveautés de novembre
==========================

Salut,

Wallet sait maintenant lire tes tickets de caisse tout seul.

-- 
Tu reçois ce mail parce que tu as accepté les nouveautés et conseils d’AUBOTA (Réglages › Tes choix).
Me désabonner en un clic : https://settings.aubota.xyz/mails/exemple
Tes choix : https://settings.aubota.xyz/choix/
AUBOTA · https://aubota.xyz

Envoyer un mail

Classe hors web src.aubota.xyz/php/core/AubotaMail.php. Le site décide d’abord s’il a le droit d’écrire (voir plus bas), puis :

PHP
require_once __DIR__ . '/../src.aubota.xyz/php/core/AubotaMail.php';

$ok = AubotaMail::envoyer($email, $prenom, [
    'sorte'   => Consentements::NOTIFICATION,   // TRANSACTIONNEL | NOTIFICATION | CONSEILS
    'module'  => 'Share',                       // surtitre « AUBOTA SHARE »
    'sujet'   => 'Aubota Share — ' . $nom,
    'titre'   => 'Un fichier t’attend',
    'intro'   => $qui . ' t’a envoyé un document via AUBOTA.',
    'details' => [['Fichier', $nom]],
    'note'    => 'Lien temporaire · pas besoin de compte pour consulter.',
    'bouton'  => ['libelle' => 'Ouvrir le partage', 'lien' => $lien],
    'compte'  => $hashDuDestinataire,             // '' = adresse sans compte
    'invite_par' => $qui,
]);                                              // transport : mail() du serveur
// AubotaMail::envoyer(…, […], ['transport' => 'smtp']) → SMTP d’AuthMailer
// AubotaMail::rendre([…]) → ['sujet', 'html', 'texte', 'entetes'] sans rien envoyer
// AubotaMail::derniereErreur() après un échec
CléRôle
sorteObligatoire. Décide du pied (ci-dessous). Une sorte inconnue est traitée en notification, jamais en transactionnel.
moduleSurtitre en capitales (« AUBOTA RÉUNIONS ») et nom d’expéditeur (« AUBOTA Réunions »).
sujet · titreObjet du mail et grand titre de l’en-tête.
intro · paragraphesTexte brut (échappé) ; un saut de ligne reste un saut de ligne.
detailsEncadré [[étiquette, valeur], …] : fichier, date, lieu…
notePetite ligne sous l’encadré (durée de validité, conditions).
boutonlibelle + lien en https:// (tout autre lien est ignoré). Le lien est aussi donné en clair, à copier.
compteHash du destinataire s’il a un compte ; vide = adresse sans compte (invitation).
invite_parInvitation sans compte : qui a saisi l’adresse (« Camille Martin a saisi ton adresse… »). AubotaMail::nomSession() le donne.
pourquoiRemplace la phrase « Tu reçois ce mail parce que… » du pied.
si_pas_toiTransactionnel : ajoute « si tu n’es pas à l’origine de cette demande, ignore ce mail ».
apercuLigne grise affichée par les boîtes de réception (défaut : l’intro).

Le pied, selon la sorte

SorteAvant d’envoyerPied du mail
TRANSACTIONNEL
confirmer l’adresse, mot de passe oublié, sécurité, info de service
Rien : part toujours.« Il concerne ton compte AUBOTA. » Pas de désinscription (rien à désinscrire).
NOTIFICATION vers un compte
invitation, partage, préversion
Consentements::mailAutorise(NOTIFICATION, $hash)« Tu as choisi d’être prévenu par e-mail » + Ne plus être prévenu par e-mail (un clic, sans connexion) + Tes choix.
NOTIFICATION sans compte
invitation à une adresse tapée
MailOpposition::estOpposee($email) + un seul mail par invitation« X a saisi ton adresse pour t’inviter, seul mail, sans pub » + Ne plus recevoir d’invitations par AUBOTA (sans compte).
CONSEILS
nouveautés, newsletter
Consentements::mailAutorise(CONSEILS, $hash)« Tu as accepté les nouveautés et conseils » + Me désabonner en un clic + Tes choix. En-têtes List-Unsubscribe / -Post (RFC 8058).

Les liens « ne plus recevoir » mènent à https://settings.aubota.xyz/mails/<jeton> : jeton signé par le serveur (MailOpposition), page de confirmation Aubui, aucune connexion demandée. Un simple clic (ou l’antivirus d’une messagerie qui ouvre le lien) ne change rien : il faut confirmer. Le bouton « Se désabonner » de Gmail et des autres (POST List-Unsubscribe=One-Click) agit directement.

Adresses sans compte : les règles

  • Un seul mail par invitation : la même adresse invitée deux fois au même partage ou à la même réunion ne reçoit rien de plus, et il n’y a pas de relance.
  • Aucune pub dans une invitation.
  • Liste d’opposition hors web (~/.aubota/commun/mails/opposition.json), consultée avant chaque invitation : elle ne contient que des empreintes (HMAC avec une clé du serveur), jamais d’adresse.
  • On ne garde pas l’adresse au-delà de ce que l’objet exige : une réunion ne garde que l’empreinte de l’adresse invitée ; un partage garde la liste de ses destinataires tant qu’il existe (« à qui j’ai partagé »), effacée avec lui. Aucune adresse dans les journaux.

Pourquoi il tient dans toutes les boîtes

  • Tables et styles en ligne, couleurs doublées en bgcolor : un client qui retire le CSS garde le fond sombre et le texte lisible.
  • 600 px au plus, une colonne : rien à défiler de côté sur téléphone (vérifié à 390 et 700 px).
  • Aucune image, aucune police externe, rien de tiers : polices du système, ≈ 6 Ko.
  • Sombre partout, déclaré (color-scheme) : Apple Mail ne l’inverse pas ; Gmail et Outlook en mode sombre gardent le fond sombre (vérifié en mode sombre forcé de Chrome).
  • Toujours une version texte, avec les mêmes liens.

Ce qui passe déjà par le modèle

EnvoiSorteTransport
Inscription : confirmer l’adresseTransactionnelmail()
Mot de passe oubliéTransactionnelSMTP d’auth (AuthSmtpMail, rendu par AubotaMail::rendre)
Réglages : changer d’e-mail (lien vers l’adresse actuelle, puis vers la nouvelle ; alerte « Annuler ce changement » vers l’ancienne)Transactionnelmail() (CompteEmail)
Share : partage d’un fichierNotification (compte ou adresse)mail()
Réunions : invitationNotification (compte ou adresse)mail()
Listes : invitationNotification (compte)mail()
Préversions de l’appNotification (compte)SMTP (AuthMailer)
Administration › MailsConseils, ou Transactionnel pour une info de serviceSMTP (AuthMailer)
Accessibilité
  • lang="fr", tables marquées role="presentation", un vrai titre h1.
  • Contrastes sur la carte : texte 11:1, pied 5,5:1 (un cran plus clair que l’ancien mail de Share, qui était à 3,3:1). Le bouton garde le bleu de Share (3,7:1, texte gras) et son lien est aussi donné en clair.
  • La version texte se lit seule (lecteurs d’écran, clients sans HTML).
Aubui · design system AUBOTA · version 2026-10-30-5 · API figée · README · Une nouveauté Aubui = une section ici.