- Add newsletter database table migration - Create newsletter controller with subscribe/unsubscribe endpoints - Add newsletter routes and validation - Implement newsletter service with email validation - Add setup documentation and migration scripts - Include test page for newsletter functionality 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
132 lines
4.2 KiB
JavaScript
132 lines
4.2 KiB
JavaScript
/**
|
|
* Service Newsletter
|
|
*/
|
|
import nodemailer from 'nodemailer';
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config();
|
|
|
|
// Configuration du transporteur email (réutilise la config du service email)
|
|
const createTransporter = () => {
|
|
if (process.env.NODE_ENV === 'development' && !process.env.SMTP_HOST) {
|
|
console.log('⚠️ Mode développement: Les emails seront affichés dans la console');
|
|
return null;
|
|
}
|
|
|
|
return nodemailer.createTransport({
|
|
host: process.env.SMTP_HOST,
|
|
port: parseInt(process.env.SMTP_PORT) || 587,
|
|
secure: process.env.SMTP_PORT === '465',
|
|
auth: {
|
|
user: process.env.SMTP_USER,
|
|
pass: process.env.SMTP_PASS,
|
|
},
|
|
});
|
|
};
|
|
|
|
const transporter = createTransporter();
|
|
|
|
/**
|
|
* Fonction générique pour envoyer un email
|
|
*/
|
|
const sendEmail = async ({ to, subject, html, text }) => {
|
|
try {
|
|
if (!transporter) {
|
|
console.log('📧 Email qui aurait été envoyé:');
|
|
console.log('To:', to);
|
|
console.log('Subject:', subject);
|
|
console.log('Content:', text || html);
|
|
return { success: true, mode: 'dev' };
|
|
}
|
|
|
|
const mailOptions = {
|
|
from: process.env.EMAIL_FROM || 'noreply@thetiptop.fr',
|
|
to,
|
|
subject,
|
|
text,
|
|
html,
|
|
};
|
|
|
|
const info = await transporter.sendMail(mailOptions);
|
|
console.log('✅ Email envoyé:', info.messageId);
|
|
return { success: true, messageId: info.messageId };
|
|
} catch (error) {
|
|
console.error('❌ Erreur envoi email:', error);
|
|
throw new Error('Erreur lors de l\'envoi de l\'email');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Envoie un email de confirmation d'abonnement à la newsletter
|
|
*/
|
|
export const sendNewsletterConfirmationEmail = async (email) => {
|
|
const unsubscribeUrl = `${process.env.FRONTEND_URL || 'http://localhost:3000'}/newsletter/unsubscribe?email=${encodeURIComponent(email)}`;
|
|
|
|
const html = `
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<style>
|
|
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
|
|
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
|
|
.header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
|
|
.content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
|
|
.footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
|
|
.unsubscribe { margin-top: 30px; padding-top: 20px; border-top: 1px solid #ddd; }
|
|
.unsubscribe a { color: #999; text-decoration: none; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div class="header">
|
|
<h1>🍵 Bienvenue dans notre newsletter!</h1>
|
|
</div>
|
|
<div class="content">
|
|
<h2>Merci de votre abonnement</h2>
|
|
<p>Nous sommes ravis de vous compter parmi nos abonnés !</p>
|
|
<p>Vous recevrez désormais nos dernières actualités, offres exclusives et nouveautés directement dans votre boîte mail.</p>
|
|
<p>Restez connecté avec Thé Tip Top pour découvrir :</p>
|
|
<ul>
|
|
<li>🍵 Nos nouveaux thés et infusions</li>
|
|
<li>🎁 Des offres spéciales réservées aux abonnés</li>
|
|
<li>📰 Les actualités de nos boutiques</li>
|
|
<li>🎉 Les résultats de nos jeux-concours</li>
|
|
</ul>
|
|
<div class="unsubscribe">
|
|
<p style="font-size: 12px; color: #999;">
|
|
Vous ne souhaitez plus recevoir nos emails ? <a href="${unsubscribeUrl}">Se désabonner</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="footer">
|
|
<p>© 2025 Thé Tip Top - Tous droits réservés</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
`;
|
|
|
|
const text = `
|
|
Bienvenue dans notre newsletter!
|
|
|
|
Nous sommes ravis de vous compter parmi nos abonnés !
|
|
|
|
Vous recevrez désormais nos dernières actualités, offres exclusives et nouveautés directement dans votre boîte mail.
|
|
|
|
Pour vous désabonner: ${unsubscribeUrl}
|
|
|
|
© 2025 Thé Tip Top - Tous droits réservés
|
|
`;
|
|
|
|
return sendEmail({
|
|
to: email,
|
|
subject: '🍵 Bienvenue dans la newsletter Thé Tip Top',
|
|
html,
|
|
text,
|
|
});
|
|
};
|
|
|
|
export default {
|
|
sendNewsletterConfirmationEmail,
|
|
};
|