Files
OPENCLAW_ARCHIVE3_17/workspace/reference-gmail.md
Thierry Tallagrand f121f0a196 workspace: rapport solaire, prevision de nuit, concierge, courrier, fiche allegee
- Fiche agent maison (AGENTS.md) : prevision de nuit relayee par script, import
  EDF, regle JEEP midi, saisie vehicule/niveau/depart, concierge qui relaie
  « ✅ Noté » ou « Rien n'est noté », groupe A deplace (28 649 -> 25 831 car.).
- Nouvelles references : reference-concierge.md, reference-workspace.md.
- Scripts : rapport-solaire.js, prevision-nuit.js, airtria-ha-vehicule.js,
  concierge-live.js (answer ne sort plus jamais vide, mode CONCIERGE_SIMULATION).
- Courrier Orange / AIRTRIA / Gmail : audits, regles, menage, recents.
- Bancs EVCS tests-pv (G5 accepte « anomal »).
- .gitignore : liste blanche etendue aux nouveaux scripts et bancs.
2026-09-30 11:32:44 +02:00

6.4 KiB
Raw Blame History

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 <threadId> / … chercher "<requête>" (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 "<query>" -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 <id> -a tallagrand.thierry@gmail.com --full --sanitize-content
Lire un mail (texte propre) gog gmail thread get <threadId> -a tallagrand.thierry@gmail.com --full --sanitize-content

4.2 Envoi

gog gmail send -a tallagrand.thierry@gmail.com --to <destinataire> --subject "<sujet>" --body "<corps>"

Flags : --cc=, --bcc=, --body-html="<html>", --attach=<path> (répétable), --reply-to-message-id=<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 <email> --to <dest> --subject "…" --body "…"
Lister gog gmail drafts list -a <email>
Envoyer gog gmail drafts send <draftId> -a <email>
Supprimer gog gmail drafts delete <draftId> -a <email>

4.4 Mutations — --dry-run obligatoire avant action de masse

Tâche Commande
Corbeille gog gmail trash <messageId…> -a <email> --dry-run puis --force (IDs obtenus par search … -j, PAS une requête)
Archiver gog gmail archive <messageId…> -a <email> --dry-run puis --force (idem : IDs, pas de requête)
Labels gog gmail messages modify <id> -a <email> --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 <ids> --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/<année>. 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.<année>, veille = Veille. Crons : airtria-tri-quotidien 19h50, airtria-email-report 20h30. Journal airtria-housekeeping.md. mail-recent.py orange fonctionne aussi (= orange-recent.py).