103 lines
3.1 KiB
JavaScript
103 lines
3.1 KiB
JavaScript
const nodemailer = require('nodemailer');
|
||
const fs = require('fs');
|
||
|
||
/* =========================
|
||
SMTP Transport
|
||
========================= */
|
||
const transporter = nodemailer.createTransport({
|
||
host: process.env.MAIL_HOST, // smtp.ionos.de
|
||
port: Number(process.env.MAIL_PORT), // 587
|
||
secure: false, // ❗ MUSS false sein bei 587
|
||
requireTLS: true, // ✅ IONOS braucht das
|
||
auth: {
|
||
user: process.env.MAIL_USER,
|
||
pass: process.env.MAIL_PASS
|
||
},
|
||
tls: {
|
||
rejectUnauthorized: false // ✅ verhindert TLS-Abbruch
|
||
}
|
||
});
|
||
|
||
console.log('MAIL_HOST:', process.env.MAIL_HOST);
|
||
console.log('MAIL_PORT:', process.env.MAIL_PORT);
|
||
|
||
/* =========================
|
||
Mail senden
|
||
========================= */
|
||
module.exports = async function sendContractMail(data) {
|
||
try {
|
||
if (!data || !data.email) {
|
||
console.warn('⚠️ Vertragsmail nicht gesendet – keine E-Mail-Adresse');
|
||
return false;
|
||
}
|
||
|
||
if (!data.vertragsnummer) {
|
||
console.warn('⚠️ Vertragsmail nicht gesendet – keine Vertragsnummer');
|
||
return false;
|
||
}
|
||
|
||
const pdfPath = data.pdfPath || null;
|
||
const hasPdf = pdfPath && fs.existsSync(pdfPath);
|
||
|
||
const datum = data.datum
|
||
? new Date(data.datum).toLocaleDateString('de-DE')
|
||
: new Date().toLocaleDateString('de-DE');
|
||
|
||
const vertragName = data.vertragName || 'Mitgliedsvertrag';
|
||
const betragText =
|
||
typeof data.betrag === 'number'
|
||
? `${data.betrag.toFixed(2)} € / Monat`
|
||
: '—';
|
||
|
||
await transporter.sendMail({
|
||
from: `"Plusfit Verträge" <${process.env.MAIL_USER}>`,
|
||
to: data.email,
|
||
subject: 'Dein Mitgliedsvertrag bei Plusfit',
|
||
text: `
|
||
Hallo ${data.vorname || ''},
|
||
|
||
vielen Dank für deine Anmeldung bei Plusfit.
|
||
|
||
Dein Vertrag wurde am ${datum} online abgeschlossen.
|
||
Gemäß § 126a BGB ist keine handschriftliche Unterschrift erforderlich.
|
||
|
||
----------------------------------
|
||
Vertragsdetails
|
||
----------------------------------
|
||
Vertragsnummer: ${data.vertragsnummer}
|
||
Vertragsart: ${vertragName}
|
||
Beitrag: ${betragText}
|
||
|
||
${hasPdf ? 'Im Anhang findest du deinen Vertrag als PDF.' : 'Der Vertrag ist in deinem Kundenbereich einsehbar.'}
|
||
|
||
----------------------------------
|
||
Widerrufsbelehrung
|
||
----------------------------------
|
||
Du hast das Recht, diesen Vertrag binnen 14 Tagen ohne Angabe von Gründen zu widerrufen.
|
||
Die Frist beginnt mit dem Tag des Vertragsabschlusses.
|
||
|
||
Der Widerruf kann schriftlich oder per E-Mail erfolgen.
|
||
|
||
Mit freundlichen Grüßen
|
||
Dein Plusfit-Team
|
||
`.trim(),
|
||
|
||
attachments: hasPdf
|
||
? [
|
||
{
|
||
filename: `Vertrag_${data.vertragsnummer}.pdf`,
|
||
path: pdfPath
|
||
}
|
||
]
|
||
: []
|
||
});
|
||
|
||
console.log(`📧 Vertragsmail gesendet an ${data.email}`);
|
||
return true;
|
||
|
||
} catch (err) {
|
||
console.error('❌ Fehler beim Versand der Vertragsmail:', err);
|
||
return false;
|
||
}
|
||
};
|