espace-paie-odentas/DEBUG_EMAIL_NOTIFICATIONS_TICKETS.md

5 KiB

🔍 Guide de débogage - Notifications Email Tickets

Corrections appliquées

  1. Import Supabase : Remplacé createRouteHandlerClient par createSbServer et createSbServiceRole
  2. Permissions : Utilisation de createSbServiceRole() pour getUserById()
  3. Récupération du prénom : Depuis user_metadata.display_name au lieu de organization_members.first_name
  4. Logs ajoutés : Logs détaillés à chaque étape de l'envoi

📋 Comment tester

1. Ouvrir le terminal où tourne npm run dev

2. Envoyer un message depuis /staff/tickets/[id]

  • Écrire un message
  • NE PAS cocher "Note interne"
  • Cliquer sur "Envoyer"
  • Confirmer dans le modal

3. Surveiller les logs dans le terminal

Vous devriez voir ces logs dans l'ordre :

Logs attendus (succès)

📧 [POST messages] Envoi de notification email...
📧 [POST messages] Ticket: { id: 'xxx-xxx-xxx', created_by: 'yyy-yyy-yyy' }
📧 [POST messages] Creator user: { hasData: true, email: 'user@example.com', error: null }
📧 [POST messages] Staff profile: { hasData: true, email: 'staff@example.com', error: null }
📧 [POST messages] Envoi vers: user@example.com
📧 [POST messages] Données email: {
  firstName: 'Jean',
  staffName: 'Support Team',
  ticketId: 'xxx-xxx-xxx',
  ticketSubject: 'Mon problème'
}
🔍 [SES DEBUG] sendUniversalEmailV2 called with: {
  type: 'support-reply',
  toEmail: 'user@example.com',
  subject: 'Nouvelle réponse à votre ticket: Mon problème'
}
✅ Email sent successfully: [MessageId]
✅ [POST messages] Notification email envoyée à user@example.com pour le ticket xxx-xxx-xxx

Logs d'erreur possibles

Problème 1 : Utilisateur introuvable

📧 [POST messages] Creator user: { hasData: false, email: undefined, error: [Error] }
❌ [POST messages] Email du créateur introuvable

Solution : L'utilisateur n'existe pas ou a été supprimé

Problème 2 : Permissions insuffisantes

❌ [POST messages] Erreur: AuthApiError: User not allowed

Solution : Vérifier que SUPABASE_SERVICE_ROLE_KEY est bien configurée

Problème 3 : Email invalide

🚨 [SES DEBUG] Invalid toEmail detected: { toEmail: '', type: 'string' }

Solution : L'utilisateur n'a pas d'email configuré

Problème 4 : Erreur SES

❌ [SES ERROR] Failed to send email: [Error message]

Solution : Problème avec AWS SES (quota, email non vérifié, etc.)

🔍 Vérifications supplémentaires

Vérifier la variable d'environnement

# Dans le terminal
echo $SUPABASE_SERVICE_ROLE_KEY

Doit retourner une longue chaîne commençant par eyJ...

Vérifier la configuration SES

# Vérifier que les variables AWS sont configurées
grep "AWS_" .env.local

Doit contenir :

AWS_REGION=eu-west-3
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_SES_FROM_EMAIL=...

Tester l'envoi d'email directement

Vous pouvez créer un petit script de test dans /scripts/test-email.ts :

import { sendSupportReplyEmail } from "@/lib/emailMigrationHelpers";

async function testEmail() {
  try {
    await sendSupportReplyEmail("votre-email@example.com", {
      firstName: "Test",
      ticketId: "test-123",
      ticketSubject: "Test d'envoi",
      staffName: "Équipe Test",
      staffMessage: "Ceci est un message de test",
    });
    console.log("✅ Email de test envoyé !");
  } catch (error) {
    console.error("❌ Erreur:", error);
  }
}

testEmail();

📧 Vérifier les emails envoyés

Dans AWS SES Console

  1. Aller sur https://console.aws.amazon.com/ses/
  2. Région : Europe (Paris) eu-west-3
  3. Menu : Email sendingStatistics
  4. Vérifier les emails envoyés dans les dernières minutes

Vérifier les bounces

Si l'email n'arrive pas :

  • Vérifier les Bounces (rebonds) dans SES
  • Vérifier les Complaints (plaintes)
  • Vérifier que l'email destinataire n'est pas dans une liste noire

Vérifier le spam

L'email peut arriver dans les spams. Vérifier :

  • Dossier spam du destinataire
  • Promotions (Gmail)
  • Autres dossiers

🎯 Checklist complète

  • Le serveur Next.js est redémarré
  • Le message est envoyé SANS cocher "Note interne"
  • Les logs 📧 [POST messages] apparaissent dans le terminal
  • Creator user a hasData: true et un email
  • sendUniversalEmailV2 est appelé
  • Aucune erreur SES dans les logs
  • L'email arrive dans la boîte de réception (ou spam) du destinataire

💡 Notes importantes

  1. Les notes internes ne déclenchent PAS d'email (comportement normal)
  2. L'email est envoyé à l'adresse personnelle de l'utilisateur (depuis auth.users)
  3. Le prénom vient de display_name dans les métadonnées utilisateur
  4. Le nom du staff vient aussi de display_name ou de l'email

Si après toutes ces vérifications, l'email n'est toujours pas envoyé, partagez-moi les logs complets du terminal !

Guide créé le 14 octobre 2025