fix(mail): from-name = nom de l'org (pas "Rubis Sur l'Ongle")
All checks were successful
Build & Deploy API / build-and-deploy (push) Successful in 1m8s

Le client final qui reçoit la relance voyait "From: Rubis Sur l'Ongle"
alors qu'il connaît "Arthur Barré" (le patron de la TPE qui utilise
Rubis). Confusion garantie côté client → relance perçue comme spam.

Fix : `sendRelanceEmail` utilise maintenant comme display name "From" :
  1. `organization.name` (en priorité — c'est le nom commercial connu
     du client)
  2. `user.fullName` (fallback si l'org n'a pas de nom posé)
  3. `MAIL_FROM_NAME` env (dernier recours, "Rubis Sur l'Ongle" en prod)

L'adresse technique reste sur notre domaine vérifié (relances@arthurbarre.fr
→ SPF/DKIM Resend OK), seul le display name change.

Le mail check-in (envoyé À l'user, pas au client) garde "Rubis Sur l'Ongle"
comme display — c'est nous qui le notifions, c'est cohérent.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
ordinarthur 2026-05-07 17:45:57 +02:00
parent ab75f1f979
commit 87c6f49692

View File

@ -97,7 +97,15 @@ export async function sendRelanceEmail({
const subject = renderTemplate(step.subject, vars)
const body = renderTemplate(step.body, vars)
const fromAddress = env.get('MAIL_FROM_ADDRESS', 'relances@rubis-sur-l-ongle.fr')
const fromName = env.get('MAIL_FROM_NAME', "Rubis Sur l'Ongle")
// Le client final connaît l'org (ex: "Arthur Barré"), pas Rubis. On utilise
// le nom de l'org comme display name visible côté client. Fallback :
// user.fullName, puis MAIL_FROM_NAME (= "Rubis Sur l'Ongle") en dernier
// recours si l'org n'a pas de nom posé.
// L'adresse technique reste sur notre domaine vérifié (SPF/DKIM Resend).
const fromName =
organization?.name?.trim() ||
user?.fullName?.trim() ||
env.get('MAIL_FROM_NAME', "Rubis Sur l'Ongle")
// FORK DÉMO — unique point où l'app dévie de la prod. Si l'org est
// en mode démo, on capture l'email dans demo_captured_emails au lieu