diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a8169ceb..7efa883f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ +ignoredBuiltDependencies: + - node-pty onlyBuiltDependencies: - '@prisma/client' - '@prisma/engines' diff --git a/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.schema.ts b/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.schema.ts index 1daa533e..f5c06a8a 100644 --- a/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.schema.ts +++ b/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.schema.ts @@ -6,6 +6,7 @@ export const EmailFormSchema = z.object({ smtpHost: z.string(), smtpPort: z.string(), smtpUser: z.string(), + smtpSecure: z.boolean() }); export type EmailFormType = z.infer; diff --git a/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.tsx b/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.tsx index 38d3aadc..2e2d0f91 100644 --- a/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.tsx +++ b/src/components/wrappers/dashboard/admin/settings/email/email-form/email-form.tsx @@ -30,6 +30,7 @@ import {render} from "@react-email/components"; import EmailSettingsTest from "@/components/emails/email-settings-test"; import {ButtonWithLoading} from "@/components/wrappers/common/button/button-with-loading"; import {Send} from "lucide-react"; +import {Switch} from "@/components/ui/switch"; export type EmailFormProps = { defaultValues?: EmailFormType; @@ -178,6 +179,23 @@ export const EmailForm = (props: EmailFormProps) => { )} /> + + ( + + Secure + + + + + + )} + />
{props.defaultValues?.smtpFrom && ( diff --git a/src/env.mjs b/src/env.mjs index 68ff3e5f..395706ec 100644 --- a/src/env.mjs +++ b/src/env.mjs @@ -27,7 +27,12 @@ export const env = createEnv({ SMTP_HOST: z.string().optional(), SMTP_PORT: z.string().optional(), SMTP_USER: z.string().optional(), - SMTP_SECURE: z.coerce.boolean().default(true), + + + SMTP_SECURE: z + .enum(["true", "false"]) + .transform((val) => val === "true") + .default("true"), AUTH_GOOGLE_ID: z.string().optional(), AUTH_GOOGLE_SECRET: z.string().optional(), diff --git a/src/lib/auth/auth.ts b/src/lib/auth/auth.ts index 53d588bf..47943e0b 100644 --- a/src/lib/auth/auth.ts +++ b/src/lib/auth/auth.ts @@ -455,19 +455,29 @@ export const auth = betterAuth({ const deviceInfo = getDeviceDetails(session.userAgent); - await sendEmail({ - to: user.email, - subject: "New login to your account", - html: await render( - EmailNewLogin({ - firstname: user.name!, - os: deviceInfo.os, - browser: deviceInfo.browser, - ipAddress: session.ipAddress!, - }), - {}, - ), - }); + + try { + await sendEmail({ + to: user.email, + subject: "New login to your account", + html: await render( + EmailNewLogin({ + firstname: user.name!, + os: deviceInfo.os, + browser: deviceInfo.browser, + ipAddress: session.ipAddress!, + }), + {}, + ), + }); + } catch (error) { + console.log("sendEmail failed", { + userId: user.id, + details: "Please Check your env variables or system config", + email: user.email, + error, + }); + } (await auth.$context).internalAdapter.updateUser(user.id, { lastConnectedAt: new Date(), diff --git a/src/utils/init.ts b/src/utils/init.ts index b18de2a0..2d194b3e 100644 --- a/src/utils/init.ts +++ b/src/utils/init.ts @@ -48,6 +48,7 @@ async function setupCronJobs() { async function createSettingsIfNotExist() { await db.transaction(async (tx) => { + const systemSettingsValues = { name: "system", smtpPassword: env.SMTP_PASSWORD ?? null,