42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
/* =====================================================================
|
|
lib/email.js — E-Mail-Versand über Resend. 1:1 portiert aus functions/_shared/email.js.
|
|
sendeEmail() wirft NIE einen Fehler, gibt nur { ok, error? } zurück — eine fehlgeschlagene
|
|
E-Mail darf nie eine Bestellung zum Scheitern bringen (siehe bestellung-erstellen.js).
|
|
===================================================================== */
|
|
|
|
const RESEND_API_URL = "https://api.resend.com/emails";
|
|
const STANDARD_ABSENDER = "Van's DIY & Bastelbedarf <[email protected]>";
|
|
|
|
export async function sendeEmail({ to, subject, html, text, from }) {
|
|
if (!process.env.RESEND_API_KEY) {
|
|
return { ok: false, error: "RESEND_API_KEY nicht gesetzt — E-Mail-Versand noch nicht eingerichtet." };
|
|
}
|
|
try {
|
|
const res = await fetch(RESEND_API_URL, {
|
|
method: "POST",
|
|
headers: {
|
|
Authorization: `Bearer ${process.env.RESEND_API_KEY}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({
|
|
from: from || process.env.RESEND_FROM || STANDARD_ABSENDER,
|
|
to: Array.isArray(to) ? to : [to],
|
|
subject,
|
|
html,
|
|
text,
|
|
}),
|
|
});
|
|
if (!res.ok) {
|
|
const fehlertext = await res.text().catch(() => "");
|
|
return { ok: false, error: `Resend antwortete mit Status ${res.status}: ${fehlertext}` };
|
|
}
|
|
return { ok: true };
|
|
} catch (err) {
|
|
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
}
|
|
}
|
|
|
|
export function escapeHtmlFuerEmail(str) {
|
|
return String(str ?? "").replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]));
|
|
}
|