Dienstplan-Pro/server/mailer.js

35 lines
1.2 KiB
JavaScript

const nodemailer = require('nodemailer');
let transport;
function getTransport() {
if (transport !== undefined) return transport;
if (!process.env.SMTP_HOST) { transport = null; return null; }
transport = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: parseInt(process.env.SMTP_PORT, 10) || 587,
secure: process.env.SMTP_SECURE === 'true',
auth: process.env.SMTP_USER ? { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS } : undefined,
});
return transport;
}
/**
* Verschickt den Magic-Link. Ohne SMTP-Konfiguration → Konsolen-Fallback (Dev/Test),
* kein Wurf. Gibt { sent, url } zurück.
*/
async function sendMagicLink(email, url) {
const t = getTransport();
if (!t) {
console.log(`[mailer] Kein SMTP — Magic-Link für ${email}: ${url}`);
return { sent: false, url };
}
await t.sendMail({
from: process.env.SMTP_FROM || 'Dienstplan-Pro <noreply@localhost>',
to: email,
subject: 'Dein Login-Link für Dienstplan-Pro',
text: `Hallo,\n\nhier ist dein einmaliger Login-Link (30 Minuten gültig):\n${url}\n\nWenn du das nicht angefordert hast, ignoriere diese E-Mail.`,
});
return { sent: true, url };
}
module.exports = { sendMagicLink, getTransport };