From 87c6f496926305ba83424fd254bc086e3d20d71c Mon Sep 17 00:00:00 2001 From: ordinarthur <@arthurbarre.js@gmail.com> Date: Thu, 7 May 2026 17:45:57 +0200 Subject: [PATCH] fix(mail): from-name = nom de l'org (pas "Rubis Sur l'Ongle") MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- apps/api/app/services/mail_dispatcher.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/api/app/services/mail_dispatcher.ts b/apps/api/app/services/mail_dispatcher.ts index 898d2c1..be68368 100644 --- a/apps/api/app/services/mail_dispatcher.ts +++ b/apps/api/app/services/mail_dispatcher.ts @@ -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