Tâches par e-mail
Chaque membre a une adresse personnelle du type 3f9c…@tasks.tandem-agenda.app. Un e-mail
transféré à cette adresse devient une tâche du foyer, créée au nom de ce membre :
- le sujet (sans « Fwd: », « TR: »…) passe par l'ajout rapide : « Payer la facture vendredi » donne une tâche datée de vendredi ;
- l'expéditeur, le sujet et le message (texte brut, 5 000 caractères au plus) vont dans les notes ;
- sans sujet, la première ligne du message sert de titre.
- le sujet peut aussi confier la tâche : « Faire la lessive mercredi 11h30 @grace » ;
- les pièces jointes (facture PDF, photo…) sont jointes à la tâche (10 Mo par fichier ; les images intégrées au message, comme les logos de signature, sont ignorées) ;
- un accusé de réception est envoyé à l'adresse du compte (jamais à l'expéditeur, qui peut
être falsifié) : « ✓ Tâche créée : … », avec la date, qui s'en charge et un lien vers la
tâche. Un e-mail vide donne un message « Aucune tâche créée ». L'accusé part par le SMTP de
l'app (
SMTP_*, cf. docs/deployment.md §8).
L'adresse se crée dans Réglages → Ajouter par e-mail, où l'on peut aussi la remplacer (l'ancienne cesse de fonctionner) ou la désactiver. Elle est secrète : quiconque la connaît peut ajouter des tâches au foyer.
Fonctionnement
Gmail, Outlook… ──► Resend (MX de tasks.tandem-agenda.app) ──► webhook email.received ──► POST /v1/inbound/resend
└► GET api.resend.com/emails/receiving/{id}
- La réception se fait sur un sous-domaine dédié : les e-mails de
tandem-agenda.app(et les enregistrements utilisés par Resend pour l'envoi) ne changent pas. - Le webhook est vérifié par sa signature (Svix, secret
whsec_…, horodatage de moins de 5 minutes). Il ne contient pas le message : l'API le lit ensuite avec la clé Resend. - Un même e-mail livré deux fois ne crée qu'une tâche. Adresse inconnue ou désactivée : ignoré. API Resend indisponible : erreur, Resend réessaie plus tard.
- L'API ne garde que la tâche créée et ses pièces jointes (stockées en base, donc dans les sauvegardes ; 200 Mo au plus par foyer).
Installation (une fois)
-
Resend → Domains → Add domain :
tasks.tandem-agenda.app, puis activer la réception (Receiving). Resend affiche les enregistrements DNS à créer, dont un MX pourtasks.tandem-agenda.app. -
Cloudflare → tandem-agenda.app → DNS → Records : ajouter exactement ces enregistrements (proxy désactivé, « DNS only »). Rien à faire dans Email Routing de Cloudflare. De retour dans Resend : Verify.
-
Resend → Webhooks → Add endpoint :
- URL :
https://tandem-agenda.app/v1/inbound/resend; - événement :
email.receiveduniquement ; - copier le Signing secret (
whsec_…).
- URL :
-
Resend → API Keys → Create API key : nom « Tandem — réception », permission Full access (une clé « Sending access » ne peut pas lire les e-mails reçus).
-
Coolify (service
api), puis Redeploy :INBOUND_EMAIL_ADDRESS={token}@tasks.tandem-agenda.app(littéralement{token}) ;RESEND_WEBHOOK_SECRET= le secretwhsec_…;RESEND_API_KEY= la clé créée à l'étape 4.
La section « Ajouter par e-mail » apparaît alors dans les Réglages.
-
Tester : Réglages → Ajouter par e-mail → Créer mon adresse, puis transférer un e-mail à cette adresse. La tâche apparaît en quelques secondes.
Dépannage
| Symptôme | Cause probable |
|---|---|
| Pas de section dans les Réglages | Une des trois variables manque dans Coolify (ou pas redéployé) |
Resend → Webhooks : réponses 401 | RESEND_WEBHOOK_SECRET différent du Signing secret de l'endpoint |
Réponses 502 | RESEND_API_KEY invalide ou en « Sending access » |
Réponses 403 ou page Cloudflare | Règle WAF / Bot Fight Mode qui bloque les POST de Resend : autoriser /v1/inbound/resend |
Réponse {"ignored":"address"} | Adresse remplacée ou désactivée dans les Réglages |
| Rien dans Resend → Receiving | MX de tasks.tandem-agenda.app absent ou non vérifié |