# Référence — Gmail (`gog` CLI) (Déplacé d’AGENTS.md le 26/09/2026 pour la marge de la fiche. Contenu identique, lu à la demande. Les garde-fous de sécurité 4.6/4.7 sont AUSSI répétés dans la fiche.) ## 4. Gmail — `gog` CLI v0.21.0 (OPÉRATIONNEL) Actif depuis le 9 juin 2026, auth OAuth Google persistée. Compte : `tallagrand.thierry@gmail.com`. Keyring : `/home/node/.openclaw/gogcli/data/keyring/`. Règles métier détaillées : `workspace/gmail-rules.md`. Toutes les commandes ci-dessous s'invoquent via `exec` (voir §1.2). ### 4.1 Lecture **Préférer `mail-texte` pour lire :** `python3 workspace/mail-texte.py lire ` / `… chercher ""` (texte propre + sécurité imposée). Les commandes gog ci-dessous sont la référence bas-niveau. ⚠️ `gog … thread get --full --sanitize-content` décode déjà MIME/base64/charset et assainit le HTML en texte. NE décode JAMAIS le base64 à la main via exec. (`gog gmail messages get` N'EXISTE PAS en v0.21.0 : c'est `thread get`.) | Tâche | Commande | |---|---| | Chercher des threads | `gog gmail search "" -a tallagrand.thierry@gmail.com -j --max N` | | Lister les labels | `gog gmail labels list -a tallagrand.thierry@gmail.com` | | Détail d'un thread (texte propre) | `gog gmail thread get -a tallagrand.thierry@gmail.com --full --sanitize-content` | | Lire un mail (texte propre) | `gog gmail thread get -a tallagrand.thierry@gmail.com --full --sanitize-content` | ### 4.2 Envoi gog gmail send -a tallagrand.thierry@gmail.com --to --subject "" --body "" Flags : `--cc=`, `--bcc=`, `--body-html=""`, `--attach=` (répétable), `--reply-to-message-id=`, `--dry-run`, `-j`. Exemple avec pièce jointe : gog gmail send -a tallagrand.thierry@gmail.com --to tallagrand.thierry@gmail.com --subject "Cours ORA" --body "ORA.PA : 17,86€ (+1,16%)" --attach /home/node/.openclaw/workspace/charts/prix_ora.png ### 4.3 Brouillons | Tâche | Commande | |---|---| | Créer | `gog gmail drafts create -a --to --subject "…" --body "…"` | | Lister | `gog gmail drafts list -a ` | | Envoyer | `gog gmail drafts send -a ` | | Supprimer | `gog gmail drafts delete -a ` | ### 4.4 Mutations — `--dry-run` obligatoire avant action de masse | Tâche | Commande | |---|---| | Corbeille | `gog gmail trash -a --dry-run` puis `--force` (IDs obtenus par `search … -j`, PAS une requête) | | Archiver | `gog gmail archive -a --dry-run` puis `--force` (idem : IDs, pas de requête) | | Labels | `gog gmail messages modify -a --add-label X --remove-label Y` | ### 4.5 Mapping question → action | Question | Commande | |---|---| | « Envoie un mail à X, sujet Y, corps Z » | `gog gmail send --to X --subject "Y" --body "Z"` | | « Envoie-moi un mail » | `gog gmail send --to tallagrand.thierry@gmail.com …` | | « Combien de mails aujourd'hui » | `gog gmail search "in:inbox newer_than:1d" -j --max 100` | | « Trie mes vieilles promos » | `search "category:promotions older_than:30d" -j` pour les IDs, puis `trash --dry-run` | | « Liste les mails de X » | `gog gmail search "from:X" -j --max N` | ### 4.6 JAMAIS 1. **Suppression définitive** (`messages.delete`) : interdiction absolue. Toujours `trash` (récupérable 30 jours). 2. **Toucher la whitelist** : voir `gmail-rules.md`. Un mail qui matche un domaine whitelisté → ABORT silencieux. 3. Plus de **200 actions par batch**. 4. Plus de **2000 actions par jour** sans confirmation humaine explicite. 5. **Modifier les labels système** : `INBOX` peut être retiré (archivage), mais `SENT`/`DRAFT`/`IMPORTANT`/`STARRED`/`SPAM`/`TRASH` sont en lecture seule. 6. Lancer une vague sans dry-run validé. ### 4.7 TOUJOURS 1. **Dry-run** avant toute action de masse (>5 mails) : lister les IDs (échantillon 10 + total), présenter à validation, exécuter seulement après un « go » explicite. 2. **Logger chaque batch** dans `gmail-housekeeping.md` (append-only) : timestamp, règle, IDs touchés, action, résultat. 3. **`gmail-rules.md` est la source de vérité unique** des règles de tri. 4. **Relire la whitelist au runtime** à chaque vague, pas seulement au design. 5. **En cas de doute** sur un mail → le laisser en inbox et le loguer dans `gmail-doubts.md`. 6. **Pause de 5 s** entre deux batchs `trash` ou `archive`. 7. En cas d'échec : rapporter l'erreur réelle (stderr). 2 erreurs syntaxe/auth maximum, puis STOP. ### 4.8 Cron quotidien `daily-email-report` `30 8 * * *` Europe/Paris, livré sur WhatsApp en `announce` vers `+33607148216`. Format attendu : - Ligne 1 : résumé global court (ex. « Gmail : 3 nouveaux, 1 important »). - Ensuite, UNIQUEMENT les messages importants (livraisons, rendez-vous, alertes, factures), avec expéditeur, sujet, date/heure. **5 messages détaillés maximum.** - En français. Ignorer promotions et newsletters dans le détail. ### 4.9 Boîtes Orange (`thierry.tallagrand@wanadoo.fr`) et AIRTRIA (`@airtria.fr`, MailPlus sur ARCHIVE2) — IMAP, pas gog `gog` ne parle qu'à Gmail. La boîte Orange se lit par IMAP avec des scripts du workspace, secret dans `.env` (`ORANGE_IMAP_PASSWORD`), jamais dans une commande ni un message : - `python3 /home/node/.openclaw/workspace/mail-recent.py orange|airtria [heures]` : mails reçus sur N h ; `… orange|airtria non-lus` : total et non lus de la boîte (pour « combien de non lus ? ») (défaut 24), LECTURE SEULE, une ligne par mail avec `[non lu]` / `[newsletter]`. C'est l'outil du cron `orange-email-report` (20 h, WhatsApp, même format que §4.8). - `orange-menage.py` : vagues de ménage selon `orange-rules.md` (dry-run par défaut, `--go` UNIQUEMENT sur demande explicite du propriétaire). Corbeille = `INBOX/TRASH` (récupérable), archives = `INBOX/Archives/`. Jamais de suppression définitive. - Journal : `orange-housekeeping.md`. Audit : `orange-audit.md`. - **AIRTRIA (boîte pro)** : `python3 /home/node/.openclaw/workspace/mail-recent.py airtria [heures]` (lecture seule, même format) ; ménage `airtria-menage.py` selon `airtria-rules.md` (dry-run par défaut, `--go` sur demande explicite), corbeille = `Trash`, archives = `Archives.`, veille = `Veille`. Crons : `airtria-tri-quotidien` 19h50, `airtria-email-report` 20h30. Journal `airtria-housekeeping.md`. `mail-recent.py orange` fonctionne aussi (= orange-recent.py). ---