Checkpoint: Ajout de la possibilité d'envoyer des emails via SMTP directement (sans Resend) :
**Modifications de la base de données** : - Ajout des champs SMTP dans la table `emailConfig` : smtpHost, smtpPort, smtpSecure, smtpUser, smtpPassword **Backend** : - Installation de `nodemailer` pour l'envoi SMTP - Création de `server/_core/smtpSender.ts` avec les fonctions d'envoi SMTP et de test de connexion - Modification de `server/_core/emailSender.ts` pour supporter les deux méthodes (Resend et SMTP) - Priorité donnée à SMTP si configuré, sinon fallback sur Resend **Frontend** : - Mise à jour de `AdminEmailConfig.tsx` pour permettre le choix entre Resend et SMTP - Ajout d'un sélecteur de méthode d'envoi (Resend API / SMTP Direct) - Formulaire de configuration SMTP avec : * Hôte SMTP (ex: smtp.gmail.com) * Port (587, 465, 25) * Sécurité (TLS, SSL, None) * Identifiants (utilisateur/mot de passe) * Email expéditeur **Compatibilité** : - Support des principaux fournisseurs SMTP (Gmail, Outlook, serveurs SMTP personnalisés) - Instructions pour les mots de passe d'application Gmail - Mode simulation toujours disponible pour les tests
This commit is contained in:
5
drizzle/0016_romantic_sinister_six.sql
Normal file
5
drizzle/0016_romantic_sinister_six.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE `emailConfig` ADD `smtpHost` varchar(255);--> statement-breakpoint
|
||||
ALTER TABLE `emailConfig` ADD `smtpPort` int;--> statement-breakpoint
|
||||
ALTER TABLE `emailConfig` ADD `smtpSecure` enum('none','tls','ssl') DEFAULT 'tls';--> statement-breakpoint
|
||||
ALTER TABLE `emailConfig` ADD `smtpUser` varchar(320);--> statement-breakpoint
|
||||
ALTER TABLE `emailConfig` ADD `smtpPassword` text;
|
||||
1002
drizzle/meta/0016_snapshot.json
Normal file
1002
drizzle/meta/0016_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -113,6 +113,13 @@
|
||||
"when": 1764056078540,
|
||||
"tag": "0015_young_moonstone",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"version": "5",
|
||||
"when": 1764329348207,
|
||||
"tag": "0016_romantic_sinister_six",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -200,6 +200,17 @@ export const emailConfig = mysqlTable("emailConfig", {
|
||||
domainVerified: boolean("domainVerified").default(false).notNull(),
|
||||
/** Actif ou non */
|
||||
active: boolean("active").default(true).notNull(),
|
||||
// Champs SMTP
|
||||
/** Hôte SMTP (ex: smtp.gmail.com) */
|
||||
smtpHost: varchar("smtpHost", { length: 255 }),
|
||||
/** Port SMTP (ex: 587, 465, 25) */
|
||||
smtpPort: int("smtpPort"),
|
||||
/** Sécurité SMTP (none, tls, ssl) */
|
||||
smtpSecure: mysqlEnum("smtpSecure", ["none", "tls", "ssl"]).default("tls"),
|
||||
/** Nom d'utilisateur SMTP */
|
||||
smtpUser: varchar("smtpUser", { length: 320 }),
|
||||
/** Mot de passe SMTP (chiffré) */
|
||||
smtpPassword: text("smtpPassword"),
|
||||
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user