Changes
This commit is contained in:
@@ -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);
|
||||
Reference in New Issue
Block a user