import nodemailer from 'nodemailer'; import { Resend } from 'resend'; const FROM = process.env.MAIL_FROM || 'Dockly-Pfandsystem Demo '; let transporter = null; if (process.env.SMTP_HOST && process.env.SMTP_USER && process.env.SMTP_PASS) { transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT || '587'), secure: (process.env.SMTP_SECURE || 'false') === 'true', auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS }, }); console.log('[mail] SMTP transport aktiv:', process.env.SMTP_HOST); } const resend = process.env.RESEND_API_KEY ? new Resend(process.env.RESEND_API_KEY) : null; async function sendMail({ to, subject, html }) { if (transporter) { const info = await transporter.sendMail({ from: FROM, to, subject, html }); console.log('[mail] SMTP sent:', to, 'msgId:', info.messageId); return { provider: 'smtp', messageId: info.messageId }; } if (resend) { const r = await resend.emails.send({ from: FROM, to, subject, html }); console.log('[mail] Resend sent:', to, 'id:', r.data?.id); return { provider: 'resend', id: r.data?.id }; } console.log('[mail-dev] (kein Provider konfiguriert) ->', to, subject); return { dev: true }; } const wrap = (inner) => `
${inner}

Dockly-Pfandsystem Demo · pfandsystem.dockly.de

`; export async function sendDemoInviteMail({ to, name, slug, password, loginUrl, days }) { return sendMail({ to, subject: `Dein Dockly-Pfandsystem-Demo-Zugang (${days} Tage)`, html: wrap(`

Willkommen im Dockly-Pfandsystem-Demo

Hallo ${name},

dein ${days}-Tage Demo-Zugang ist bereit. Du kannst alle Funktionen in Ruhe testen und eigene Beispieldaten anlegen.

Login-URL: ${loginUrl}

E-Mail: ${to}

Passwort: ${password}

Tenant-Kennung: ${slug}

Bitte ändere dein Passwort nach dem ersten Login.

`), }); } // 7 Tage vor Ablauf export async function sendDemoExpiryReminderMail({ to, name, slug, daysLeft, expiresAt }) { const loginUrl = `https://pfandsystem.dockly.de/login?tenant=${slug}`; const dateStr = new Date(expiresAt).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); return sendMail({ to, subject: `Erinnerung: Dein Demo-Zugang läuft in ${daysLeft} Tagen ab`, html: wrap(`

Dein Demo-Zugang läuft bald ab

Hallo ${name},

nur noch ${daysLeft} Tag${daysLeft === 1 ? '' : 'e'} — danach wird dein Demo-Zugang am ${dateStr} automatisch deaktiviert.

Du willst weiter testen oder das System für deinen Betrieb live nehmen? Antworte einfach auf diese Mail — wir verlängern den Zugang oder besprechen die Live-Schaltung mit dir.

Jetzt einloggen

`), }); } // 1 Tag vor Ablauf (Letzter-Tag-Variante) export async function sendDemoLastDayMail({ to, name, slug, expiresAt }) { const loginUrl = `https://pfandsystem.dockly.de/login?tenant=${slug}`; const dateStr = new Date(expiresAt).toLocaleDateString('de-DE'); return sendMail({ to, subject: 'Letzter Tag: Dein Demo-Zugang läuft morgen ab', html: wrap(`

Letzter Tag für dein Demo

Hallo ${name},

morgen (${dateStr}) endet dein Demo-Zugang. Falls du noch Daten exportieren oder etwas abschließend testen möchtest, schau heute nochmal rein.

Wir würden uns sehr freuen, wenn wir gemeinsam weitermachen. Eine kurze Antwort auf diese Mail genügt — wir melden uns sofort zurück.

Jetzt einloggen

`), }); } // Demo ist abgelaufen export async function sendDemoExpiredMail({ to, name }) { return sendMail({ to, subject: 'Dein Demo-Zugang ist abgelaufen', html: wrap(`

Dein Demo ist abgelaufen

Hallo ${name},

dein Demo-Zugang zum Dockly-Pfandsystem ist heute abgelaufen. Deine Daten sind noch 14 Tage bei uns gespeichert — falls du jetzt verlängern oder live gehen möchtest, antworte einfach auf diese Mail. Danach werden die Demo-Daten automatisch gelöscht.

Vielen Dank fürs Testen!

`), }); } // SMTP-Selbsttest (zum Debuggen) export async function sendTestMail(to) { return sendMail({ to, subject: 'Dockly-Pfandsystem - SMTP-Test', html: wrap(`

SMTP-Test

Diese Test-Mail bestätigt, dass der Mail-Versand über ${process.env.SMTP_HOST || 'kein SMTP'} funktioniert.

Absender: ${FROM}

Zeitstempel: ${new Date().toISOString()}

`), }); }