Initial commit - ERP System
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// /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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// /opt/erp-system/lib/prisma.ts
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { PrismaPg } from '@prisma/adapter-pg';
|
||||
import { Pool } from 'pg';
|
||||
|
||||
// Verhindert zu viele offene Verbindungen beim Hot-Reloading in Next.js
|
||||
const globalForPrisma = global as unknown as { prisma: PrismaClient };
|
||||
|
||||
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
||||
const adapter = new PrismaPg(pool);
|
||||
|
||||
export const prisma = globalForPrisma.prisma || new PrismaClient({ adapter });
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
|
||||
|
||||
export default prisma;
|
||||
Reference in New Issue
Block a user