From 5cf5022aed7db3737ece9f8af51e5bb223dba3d5 Mon Sep 17 00:00:00 2001 From: Sidharth Babu <95430324+sidhuiwnl@users.noreply.github.com> Date: Sat, 29 Mar 2025 09:10:25 +0530 Subject: [PATCH] refactor: dynamic SMTP for self host (#138) Co-authored-by: KM Koushik --- .env.example | 3 +++ .env.selfhost.example | 4 ++++ .gitignore | 1 + .../web/src/app/(dashboard)/dev-settings/smtp/page.tsx | 10 ++++++++-- apps/web/src/env.js | 4 ++++ docker/prod/compose.yml | 2 ++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 509bb84..916c5d7 100644 --- a/.env.example +++ b/.env.example @@ -5,6 +5,9 @@ REDIS_URL="redis://localhost:6379" NEXTAUTH_URL="http://localhost:3000" +NEXT_PUBLIC_SMTP_HOST=smtp.mailtrap.io # Example SMTP host +NEXT_PUBLIC_SMTP_USER=test_userdadad@example.com # Example SMTP user + AWS_DEFAULT_REGION="us-east-1" AWS_SECRET_KEY="some-secret-key" diff --git a/.env.selfhost.example b/.env.selfhost.example index 0ee4dcb..101b313 100644 --- a/.env.selfhost.example +++ b/.env.selfhost.example @@ -12,6 +12,10 @@ DATABASE_URL="postgresql://postgres:postgres@postgres:5432/unsend" NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET= +#SMTP +NEXT_PUBLIC_SMTP_HOST=smtp.mailtrap.io # Example SMTP host +NEXT_PUBLIC_SMTP_USER= "unsend" # Example SMTP user + ## Auth providers any one is required # Github login - required GITHUB_ID="" diff --git a/.gitignore b/.gitignore index 7c9a2e2..1da1a94 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ node_modules # Testing coverage .idea + # Turbo .turbo diff --git a/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx b/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx index 65dd799..4542855 100644 --- a/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx +++ b/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx @@ -8,6 +8,12 @@ import { CardTitle, } from "@unsend/ui/src/card"; import { TextWithCopyButton } from "@unsend/ui/src/text-with-copy"; +import {env} from "~/env"; + + +const host = env.NEXT_PUBLIC_SMTP_HOST; +const user = env.NEXT_PUBLIC_SMTP_USER; + export default function ExampleCard() { return ( @@ -25,7 +31,7 @@ export default function ExampleCard() { Host:
@@ -45,7 +51,7 @@ export default function ExampleCard() { User:
diff --git a/apps/web/src/env.js b/apps/web/src/env.js index 47ccb57..b93924e 100644 --- a/apps/web/src/env.js +++ b/apps/web/src/env.js @@ -67,6 +67,8 @@ export const env = createEnv({ .string() .default("false") .transform((str) => str === "true"), + NEXT_PUBLIC_SMTP_HOST: z.string().default("smtp.unsend.dev"), + NEXT_PUBLIC_SMTP_USER: z.string().default("unsend"), }, /** @@ -101,6 +103,8 @@ export const env = createEnv({ STRIPE_SECRET_KEY: process.env.STRIPE_SECRET_KEY, STRIPE_BASIC_PRICE_ID: process.env.STRIPE_BASIC_PRICE_ID, STRIPE_WEBHOOK_SECRET: process.env.STRIPE_WEBHOOK_SECRET, + NEXT_PUBLIC_SMTP_HOST: process.env.NEXT_PUBLIC_SMTP_HOST, + NEXT_PUBLIC_SMTP_USER: process.env.NEXT_PUBLIC_SMTP_USER, }, /** * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially diff --git a/docker/prod/compose.yml b/docker/prod/compose.yml index 1632e35..02950f2 100644 --- a/docker/prod/compose.yml +++ b/docker/prod/compose.yml @@ -62,6 +62,8 @@ services: - REDIS_URL=${REDIS_URL:?err} - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false} - API_RATE_LIMIT=${API_RATE_LIMIT:-1} + - NEXT_PUBLIC_SMTP_HOST=${NEXT_PUBLIC_SMTP_HOST:-smtp.unsend.dev} + - NEXT_PUBLIC_SMTP_USER=${NEXT_PUBLIC_SMTP_USER:-unsend} depends_on: postgres: condition: service_healthy