"use server"; import { z } from "zod"; import { Resend } from "resend"; const resend = new Resend(process.env.RESEND_API_KEY); // Schemat walidacji zgodny z tym po stronie klienta const contactFormSchema = z.object({ name: z.string().min(2, "Imię musi mieć min. 2 znaki"), phone: z.string().min(9, "Wprowadź poprawny numer telefonu"), email: z.string().email("Niepoprawny adres e-mail"), subject: z.string().min(1, "Wybierz temat"), message: z.string().min(10, "Wiadomość musi mieć min. 10 znaków"), consent: z.boolean().refine((val) => val === true, "Zgoda RODO jest wymagana"), }); export async function submitContactForm(prevState: any, formData: FormData) { try { // 1. Walidacja danych z formularza const rawData = { name: formData.get("name"), phone: formData.get("phone"), email: formData.get("email"), subject: formData.get("subject"), message: formData.get("message"), consent: formData.get("consent") === "true" || formData.get("consent") === "on", }; const validatedData = contactFormSchema.parse(rawData); // 2. Wysłanie e-maila przez Resend const { data, error } = await resend.emails.send({ from: process.env.RESEND_FROM_EMAIL || "noreply@thermcool.pl", to: process.env.RESEND_TO_EMAIL || "biuro@thermcool.pl", // Docelowy e-mail (odbiorca) replyTo: validatedData.email, subject: `Nowa wiadomość ze strony: ${validatedData.subject}`, html: `
`, }); if (error) { console.error("Resend Error:", error); return { success: false, message: "Nie udało się wysłać wiadomości ze względu na błąd serwera pocztowego.", }; } console.log("Wysłano e-mail (ID):", data?.id); // 3. Zwrotka o sukcesie return { success: true, message: "Dziękujemy za wiadomość! Skontaktujemy się z Tobą najszybciej jak to możliwe.", }; } catch (error) { if (error instanceof z.ZodError) { return { success: false, message: "Wystąpił błąd walidacji. Sprawdź poprawność danych.", errors: error.flatten().fieldErrors, }; } return { success: false, message: "Wystąpił nieoczekiwany błąd serwera. Spróbuj ponownie później.", }; } }