48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
// /opt/erp-system/lib/email.ts
|
|
import nodemailer from 'nodemailer';
|
|
import prisma from './prisma';
|
|
|
|
interface EmailOptions {
|
|
to: string;
|
|
subject: string;
|
|
text: string;
|
|
html?: string;
|
|
}
|
|
|
|
export async function sendEmail({ to, subject, text, html }: EmailOptions) {
|
|
try {
|
|
// 1. Aktuelle Einstellungen aus der Datenbank laden
|
|
const settings = await prisma.systemSettings.findFirst({ where: { id: 1 } });
|
|
|
|
// 2. Prüfen, ob SMTP konfiguriert ist
|
|
if (!settings || !settings.smtpHost || !settings.smtpUser || !settings.smtpPass) {
|
|
console.warn("WARNUNG: SMTP-Einstellungen fehlen in der GUI. E-Mail an", to, "wird abgebrochen.");
|
|
return;
|
|
}
|
|
|
|
// 3. Transporter dynamisch mit den DB-Daten erstellen
|
|
const transporter = nodemailer.createTransport({
|
|
host: settings.smtpHost,
|
|
port: settings.smtpPort,
|
|
secure: settings.smtpPort === 465, // true für Port 465, sonst false (STARTTLS)
|
|
auth: {
|
|
user: settings.smtpUser,
|
|
pass: settings.smtpPass,
|
|
},
|
|
});
|
|
|
|
// 4. E-Mail senden
|
|
const info = await transporter.sendMail({
|
|
from: settings.smtpFrom || settings.smtpUser,
|
|
to,
|
|
subject,
|
|
text,
|
|
html: html || text.replace(/\n/g, '<br>'),
|
|
});
|
|
|
|
console.log("E-Mail erfolgreich gesendet: %s", info.messageId);
|
|
} catch (error) {
|
|
console.error("Fehler beim Senden der E-Mail:", error);
|
|
}
|
|
}
|