church-website/src/utils/actions.ts
2026-01-29 10:08:15 +01:00

62 lines
No EOL
1.6 KiB
TypeScript

"use server"
import { z } from 'zod'
import { Resend } from 'resend'
import { isSpam } from '@/utils/detectSpam'
/**
* Send email through Resend API
*
* @param toEmail
* @param prevState
* @param formData
*/
export async function send(toEmail: string, prevState: any, formData: FormData) {
const schema = z.object({
email: z.string().email(),
subject: z.string(),
name: z.string(),
message: z.string()
});
const validatedFields = schema.safeParse({
name: formData.get("name"),
email: formData.get("email"),
subject: formData.get("subject"),
message: formData.get("message"),
})
if (!validatedFields.success) {
return {
errors: validatedFields.error.flatten().fieldErrors,
message: "Nicht alle Felder waren gültig"
}
}
if (isSpam(validatedFields.data.message)) {
return {
message: "Ihre Nachricht wurde als unerwünschte Werbung eingestuft und nicht gesendet."
}
}
try {
const resend = new Resend(process.env.RESEND_API_KEY);
const resp = await resend.emails.send({
from: 'noreply@dreikoenige.berlin',
replyTo: validatedFields.data.email,
to: toEmail,
subject: `Über Kontaktformular: ${validatedFields.data.subject}`,
text: `Nachricht von ${validatedFields.data.name} (${validatedFields.data.email}): \n\n ${validatedFields.data.message}`
});
console.log(resp);
} catch (e) {
console.error(e);
return { message: "Fehler beim senden der Nachricht." };
}
return {
message: "Ihre Nachricht wurde erfolgreich übermittelt"
}
}