This commit is contained in:
gpt-engineer-app[bot]
2026-01-28 00:07:21 +00:00
parent ca0d8dcd8d
commit f903d47874
4 changed files with 279 additions and 1 deletions
@@ -0,0 +1,95 @@
import { serve } from "https://deno.land/std@0.190.0/http/server.ts";
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers":
"authorization, x-client-info, apikey, content-type",
};
interface ContactRequest {
name: string;
email: string;
company: string;
message: string;
}
const handler = async (req: Request): Promise<Response> => {
if (req.method === "OPTIONS") {
return new Response(null, { headers: corsHeaders });
}
try {
const { name, email, company, message }: ContactRequest = await req.json();
// Validate required fields
if (!name || !email || !message) {
throw new Error("Missing required fields");
}
// Validate email format
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
throw new Error("Invalid email format");
}
// Validate field lengths
if (name.length > 100 || email.length > 255 || (company && company.length > 100) || message.length > 2000) {
throw new Error("Field length exceeded");
}
const RESEND_API_KEY = Deno.env.get("RESEND_API_KEY");
const recipientEmail = Deno.env.get("CONTACT_EMAIL") || "kontakt@example.com";
if (!RESEND_API_KEY) {
throw new Error("RESEND_API_KEY not configured");
}
const res = await fetch("https://api.resend.com/emails", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${RESEND_API_KEY}`,
},
body: JSON.stringify({
from: "Lennart Svensson Konditorivaror <noreply@lennartsvensson.se>",
to: [recipientEmail],
reply_to: email,
subject: `Kontaktförfrågan från ${name}`,
html: `
<h2>Ny kontaktförfrågan</h2>
<p><strong>Namn:</strong> ${name}</p>
<p><strong>E-post:</strong> ${email}</p>
${company ? `<p><strong>Företag:</strong> ${company}</p>` : ""}
<hr />
<p><strong>Meddelande:</strong></p>
<p>${message.replace(/\n/g, "<br />")}</p>
`,
}),
});
if (!res.ok) {
const error = await res.text();
console.error("Resend API error:", error);
throw new Error("Failed to send email");
}
const data = await res.json();
console.log("Contact email sent successfully:", data);
return new Response(JSON.stringify({ success: true }), {
status: 200,
headers: { "Content-Type": "application/json", ...corsHeaders },
});
} catch (error: any) {
console.error("Error in send-contact-email function:", error);
return new Response(
JSON.stringify({ error: error.message }),
{
status: 500,
headers: { "Content-Type": "application/json", ...corsHeaders },
}
);
}
};
serve(handler);