diff --git a/packages/features/bookings/lib/getBookingResponsesSchema.ts b/packages/features/bookings/lib/getBookingResponsesSchema.ts index adfe196842..dd61982c77 100644 --- a/packages/features/bookings/lib/getBookingResponsesSchema.ts +++ b/packages/features/bookings/lib/getBookingResponsesSchema.ts @@ -3,7 +3,7 @@ import z from "zod"; import type { ALL_VIEWS } from "@calcom/features/form-builder/FormBuilderFieldsSchema"; import type { eventTypeBookingFields } from "@calcom/prisma/zod-utils"; -import { bookingResponses } from "@calcom/prisma/zod-utils"; +import { bookingResponses, emailSchemaRefinement } from "@calcom/prisma/zod-utils"; type EventType = Parameters[0]["eventType"]; // eslint-disable-next-line @typescript-eslint/ban-types @@ -114,7 +114,7 @@ function preprocess({ eventType.bookingFields.forEach((bookingField) => { const value = responses[bookingField.name]; const stringSchema = z.string(); - const emailSchema = isPartialSchema ? z.string() : z.string().email(); + const emailSchema = isPartialSchema ? z.string() : z.string().refine(emailSchemaRefinement); const phoneSchema = isPartialSchema ? z.string() : z.string().refine((val) => isValidPhoneNumber(val)); diff --git a/packages/prisma/zod-utils.ts b/packages/prisma/zod-utils.ts index 9baf5f2c05..b99ee957bc 100644 --- a/packages/prisma/zod-utils.ts +++ b/packages/prisma/zod-utils.ts @@ -576,3 +576,11 @@ export const allManagedEventTypeProps: { [k in keyof Omit { + const emailRegex = /^([A-Z0-9_+-]+\.?)*[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i + return emailRegex.test(value) +}