Files
Lesstime/docs/mail-cron-setup.md

2.8 KiB

Mail Integration — Configuration cron OS

Vue d'ensemble

La synchronisation IMAP est déclenchée par un cron OS toutes les 10 minutes. Elle appelle la commande Symfony app:mail:sync qui s'exécute dans le container PHP.

Un Symfony Lock (mail.sync, TTL 10 min, store flock via LOCK_DSN=flock) empêche les runs de se chevaucher si une sync prend plus de 10 min.

Prérequis

  • Container php-lesstime-fpm démarré (make start)
  • MailConfiguration.enabled = true (configurable depuis l'admin — Phase 7)
  • ENCRYPTION_KEY défini dans infra/dev/.env.docker.local (ou production env)

Installation du cron

Sur la machine hôte (pas dans le container) :

crontab -e

Ajouter la ligne suivante (adapter le chemin) :

*/10 * * * * cd /home/r-dev/malio-dev/Lesstime && make mail-sync >> /var/log/lesstime-mail-sync.log 2>&1

Ou directement via docker exec (sans dépendance à make) :

*/10 * * * * docker exec php-lesstime-fpm php bin/console app:mail:sync >> /var/log/lesstime-mail-sync.log 2>&1

Avec un utilisateur système dédié

Si le cron est configuré pour un utilisateur système spécifique (ex: www-data ou deploy) :

sudo crontab -u deploy -e

Variables d'environnement nécessaires

Variable Description Exemple
ENCRYPTION_KEY Clé hex 32 bytes pour déchiffrer le password IMAP $(php -r "echo bin2hex(random_bytes(32));")
LOCK_DSN DSN du store de verrous Symfony flock (défaut, fichier local)

La clé doit être la même que celle utilisée pour chiffrer le password lors de la configuration.

Commandes utiles

# Sync complète (toutes les boîtes)
make mail-sync

# Sync d'un seul dossier (le dossier doit déjà exister en base)
make mail-sync FOLDER=INBOX

# Simulation (dry-run, pas d'écriture BDD)
make mail-sync DRYRUN=1

# Directement dans le container
docker exec php-lesstime-fpm php bin/console app:mail:sync
docker exec php-lesstime-fpm php bin/console app:mail:sync --folder=INBOX
docker exec php-lesstime-fpm php bin/console app:mail:sync --dry-run

Logs

Les logs Symfony sont dans var/log/dev.log (ou prod.log en production). Suivre les logs en temps réel :

make logs-dev

Les messages loggés par MailSyncService sont préfixés mail.sync.

Sécurité

  • Le password IMAP est toujours stocké chiffré (libsodium secretbox)
  • Les corps de mails, passwords et pièces jointes ne sont jamais loggés
  • Le lock flock évite les runs parallèles (fichier dans /tmp/sf.mail.sync.<hash>.lock)

Production

En production, préférer un cron système ou un job scheduler (Kubernetes CronJob, ECS Scheduled Task, etc.). La commande est idempotente : relancer plusieurs fois ne duplique pas les données (UIDs uniques en base).