Checkpoint: Ajout de l'interface de configuration SMTP avec Resend : formulaire de configuration (API key, email expéditeur, nom), basculement simulation/production, test d'envoi immédiat, stockage sécurisé en base de données, et guide de configuration intégré
This commit is contained in:
@@ -666,6 +666,51 @@ export const appRouter = router({
|
||||
return { success: true };
|
||||
}),
|
||||
}),
|
||||
|
||||
emailConfig: router({
|
||||
get: adminProcedure.query(async () => {
|
||||
return db.getActiveEmailConfig();
|
||||
}),
|
||||
|
||||
upsert: adminProcedure
|
||||
.input(z.object({
|
||||
provider: z.string(),
|
||||
apiKey: z.string().nullable(),
|
||||
fromEmail: z.string().email(),
|
||||
fromName: z.string(),
|
||||
mode: z.enum(["simulation", "production"]),
|
||||
domainVerified: z.boolean(),
|
||||
}))
|
||||
.mutation(async ({ input }) => {
|
||||
await db.upsertEmailConfig(input);
|
||||
return { success: true };
|
||||
}),
|
||||
|
||||
testEmail: adminProcedure
|
||||
.input(z.object({
|
||||
toEmail: z.string().email(),
|
||||
}))
|
||||
.mutation(async ({ input }) => {
|
||||
// Importer le service d'envoi
|
||||
const { sendEmail } = await import("./_core/emailSender");
|
||||
|
||||
try {
|
||||
const success = await sendEmail({
|
||||
to: input.toEmail,
|
||||
subject: "Test d'envoi d'email - Formation Manager Itinova",
|
||||
html: `
|
||||
<h1>Test réussi !</h1>
|
||||
<p>Cet email de test a été envoyé avec succès depuis votre configuration SMTP.</p>
|
||||
<p>Votre configuration d'envoi d'emails fonctionne correctement.</p>
|
||||
`,
|
||||
});
|
||||
|
||||
return { success, message: success ? "Email envoyé avec succès" : "Échec de l'envoi" };
|
||||
} catch (error: any) {
|
||||
return { success: false, message: error.message };
|
||||
}
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export type AppRouter = typeof appRouter;
|
||||
|
||||
Reference in New Issue
Block a user