5 KiB
🔍 Guide de débogage - Notifications Email Tickets
✅ Corrections appliquées
- Import Supabase : Remplacé
createRouteHandlerClientparcreateSbServeretcreateSbServiceRole - Permissions : Utilisation de
createSbServiceRole()pourgetUserById() - Récupération du prénom : Depuis
user_metadata.display_nameau lieu deorganization_members.first_name - 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
- Aller sur https://console.aws.amazon.com/ses/
- Région : Europe (Paris) eu-west-3
- Menu : Email sending → Statistics
- 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 userahasData: trueet un emailsendUniversalEmailV2est appelé- Aucune erreur SES dans les logs
- L'email arrive dans la boîte de réception (ou spam) du destinataire
💡 Notes importantes
- Les notes internes ne déclenchent PAS d'email (comportement normal)
- L'email est envoyé à l'adresse personnelle de l'utilisateur (depuis
auth.users) - Le prénom vient de
display_namedans les métadonnées utilisateur - Le nom du staff vient aussi de
display_nameou 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