[GH-ISSUE #2247] Failed to Render Email/No Password or Activation Email Send #648

Closed
opened 2026-02-26 18:47:54 +03:00 by kerem · 8 comments
Owner

Originally created by @lotus-infosec on GitHub (Nov 26, 2025).
Original GitHub issue: https://github.com/documenso/documenso/issues/2247

Issue Description

When trying to send a password reset email I get a "Error: Failed to render email".

I also don't get activation emails and can see that the job is hanging in the Postgres DB. Confirmed that my SMTP settings are correct and am pulling from the latest docker instance.

LOGS:

app_1       | 
app_1       | 🔐 Checking certificate configuration...
app_1       | ✅ Certificate file found and readable - document signing is ready!
app_1       | 
app_1       | 📚 Useful Links:
app_1       | 📖 Documentation: https://docs.documenso.com
app_1       | 🐳 Self-hosting guide: https://docs.documenso.com/developers/self-hosting
app_1       | 🔐 Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate
app_1       | 🏥 Health check: http://localhost:3000/api/health
app_1       | 📊 Certificate status: http://localhost:3000/api/certificate-status
app_1       | 👥 Community: https://github.com/documenso/documenso
app_1       | 
app_1       | 🗄️  Running database migrations...
app_1       | Prisma schema loaded from ../../packages/prisma/schema.prisma
app_1       | Datasource "db": PostgreSQL database "documenso", schema "public" at "database:5432"
app_1       | 
app_1       | 142 migrations found in prisma/migrations
app_1       | 
app_1       | 
app_1       | No pending migrations to apply.
app_1       | 🌟 Starting Documenso server...
app_1       | [Telemetry] Telemetry is disabled. To enable, remove the DOCUMENSO_DISABLE_TELEMETRY environment variable.
database_1  | 2025-11-26 05:01:35.426 UTC [27] LOG:  checkpoint starting: time
database_1  | 2025-11-26 05:01:35.747 UTC [27] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.099 s, sync=0.050 s, total=0.321 s; sync files=2, longest=0.025 s, average=0.025 s; distance=0 kB, estimate=0 kB
app_1       | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
app_1       |     at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11)
app_1       |     at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10)
app_1       |     at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33)
app_1       |     at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21)
app_1       |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12)
app_1       |     at async Promise.all (index 0)
app_1       |     at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24)
app_1       |     at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3)
app_1       |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3)
app_1       |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
app_1       | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
app_1       |     at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11)
app_1       |     at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10)
app_1       |     at renderAsPlainText (file:///app/node_modules/@react-email/render/dist/node/index.mjs:79:33)
app_1       |     at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:68:12)
app_1       |     at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21)
app_1       |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12)
app_1       |     at async Promise.all (index 1)
app_1       |     at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24)
app_1       |     at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3)
app_1       |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3)
app_1       | Error: Failed to render email
app_1       |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:20:11)
app_1       |     at async Promise.all (index 0)
app_1       |     at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24)
app_1       |     at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3)
app_1       |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3)
app_1       |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
app_1       |     at async handler (file:///app/node_modules/hono/dist/hono-base.js:94:39)
app_1       |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
app_1       |     at async Object.handler (file:///app/node_modules/hono/dist/validator/validator.js:81:12)
app_1       |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)

COMPOSE:

services:
  database:
    image: postgres:15
    environment:
      POSTGRES_USER: documenso
      POSTGRES_PASSWORD: PASSWORD
      POSTGRES_DB: documenso
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U documenso"]
      interval: 10s
      timeout: 5s
      retries: 5
    ports:
      - "54320:5432"  
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

  app:
    image: documenso/documenso:latest
    depends_on:
      database:
        condition: service_healthy
    ports:
      - "3000:3000"
    environment:
    - NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
    - NEXT_PRIVATE_ENCRYPTION_KEY=${NEXT_PRIVATE_ENCRYPTION_KEY}
    - NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY}
    - NEXT_PUBLIC_UPLOAD_TRANSPORT=${NEXT_PUBLIC_UPLOAD_TRANSPORT}
    - NEXT_PUBLIC_WEBAPP_URL=${NEXT_PUBLIC_WEBAPP_URL}
    - NEXT_PRIVATE_INTERNAL_WEBAPP_URL=${NEXT_PRIVATE_INTERNAL_WEBAPP_URL}
    - NEXT_PRIVATE_DATABASE_URL=${NEXT_PRIVATE_DATABASE_URL}
    - NEXT_PRIVATE_DIRECT_DATABASE_URL=${NEXT_PRIVATE_DIRECT_DATABASE_URL}
    - NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH}
    - NEXT_PRIVATE_SIGNING_PASSPHRASE=${NEXT_PRIVATE_SIGNING_PASSPHRASE}
    - NEXT_PRIVATE_SMTP_TRANSPORT=${NEXT_PRIVATE_SMTP_TRANSPORT}
    - NEXT_PRIVATE_SMTP_HOST=${NEXT_PRIVATE_SMTP_HOST}
    - NEXT_PRIVATE_SMTP_PORT=${NEXT_PRIVATE_SMTP_PORT}
    - NEXT_PRIVATE_SMTP_USERNAME=${NEXT_PRIVATE_SMTP_USERNAME}
    - NEXT_PRIVATE_SMTP_PASSWORD=${NEXT_PRIVATE_SMTP_PASSWORD}
    - NEXT_PRIVATE_SMTP_FROM_NAME=${NEXT_PRIVATE_SMTP_FROM_NAME}
    - NEXT_PRIVATE_SMTP_FROM_ADDRESS=${NEXT_PRIVATE_SMTP_FROM_ADDRESS}
    - NEXT_PRIVATE_SMTP_SECURE=${NEXT_PRIVATE_SMTP_SECURE}
    - NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=${NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS}
    - NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=${NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT}
    - DOCUMENSO_DISABLE_TELEMETRY=${DOCUMENSO_DISABLE_TELEMETRY}
    volumes:
      - VOLUME

volumes:
  database:

ENV:

NEXTAUTH_SECRET=REDACT
NEXT_PRIVATE_ENCRYPTION_KEY=REDACT
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=REDACT
NEXT_PUBLIC_UPLOAD_TRANSPORT=database
NEXT_PUBLIC_WEBAPP_URL=https://REDACT
NEXT_PRIVATE_INTERNAL_WEBAPP_URL=https://REDACT (Same as Webapp)
NEXT_PRIVATE_DATABASE_URL=postgres://documenso:REDACT@database:5432/documenso
NEXT_PRIVATE_DIRECT_DATABASE_URL=postgres://documenso:REDACT@database:5432/documenso
NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=REDACT
NEXT_PRIVATE_SIGNING_PASSPHRASE=REDACT
NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth
NEXT_PRIVATE_SMTP_HOST=smtp.mailgun.org
NEXT_PRIVATE_SMTP_PORT=587
NEXT_PRIVATE_SMTP_USERNAME=mailer@REDACT.com
NEXT_PRIVATE_SMTP_PASSWORD=REDACT
NEXT_PRIVATE_SMTP_FROM_NAME=REDACT
NEXT_PRIVATE_SMTP_FROM_ADDRESS=REDACT
NEXT_PRIVATE_SMTP_SECURE=false
NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=false
NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=50
DOCUMENSO_DISABLE_TELEMETRY=true

Steps to Reproduce

Run the same compose with the same variables and you may get the same results

Expected Behavior

Emails are able to be sent

Current Behavior

Cannot render emails - no emails are being sent

Screenshots (optional)

No response

Operating System [e.g., Windows 10]

Proxmox

Browser [e.g., Chrome, Firefox]

Chrome and Firefox

Version [e.g., 2.0.1]

No response

Please check the boxes that apply to this issue report.

  • I have searched the existing issues to make sure this is not a duplicate.
  • I have provided steps to reproduce the issue.
  • I have included relevant environment information.
  • I have included any relevant screenshots.
  • I understand that this is a voluntary contribution and that there is no guarantee of resolution.
  • I want to work on creating a PR for this issue if approved
Originally created by @lotus-infosec on GitHub (Nov 26, 2025). Original GitHub issue: https://github.com/documenso/documenso/issues/2247 ### Issue Description When trying to send a password reset email I get a "`Error: Failed to render email`". I also don't get activation emails and can see that the job is hanging in the Postgres DB. Confirmed that my SMTP settings are correct and am pulling from the latest docker instance. ## LOGS: ```app_1 | 🚀 Starting Documenso... app_1 | app_1 | 🔐 Checking certificate configuration... app_1 | ✅ Certificate file found and readable - document signing is ready! app_1 | app_1 | 📚 Useful Links: app_1 | 📖 Documentation: https://docs.documenso.com app_1 | 🐳 Self-hosting guide: https://docs.documenso.com/developers/self-hosting app_1 | 🔐 Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate app_1 | 🏥 Health check: http://localhost:3000/api/health app_1 | 📊 Certificate status: http://localhost:3000/api/certificate-status app_1 | 👥 Community: https://github.com/documenso/documenso app_1 | app_1 | 🗄️ Running database migrations... app_1 | Prisma schema loaded from ../../packages/prisma/schema.prisma app_1 | Datasource "db": PostgreSQL database "documenso", schema "public" at "database:5432" app_1 | app_1 | 142 migrations found in prisma/migrations app_1 | app_1 | app_1 | No pending migrations to apply. app_1 | 🌟 Starting Documenso server... app_1 | [Telemetry] Telemetry is disabled. To enable, remove the DOCUMENSO_DISABLE_TELEMETRY environment variable. database_1 | 2025-11-26 05:01:35.426 UTC [27] LOG: checkpoint starting: time database_1 | 2025-11-26 05:01:35.747 UTC [27] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.099 s, sync=0.050 s, total=0.321 s; sync files=2, longest=0.025 s, average=0.025 s; distance=0 kB, estimate=0 kB app_1 | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition. app_1 | at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11) app_1 | at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10) app_1 | at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33) app_1 | at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21) app_1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12) app_1 | at async Promise.all (index 0) app_1 | at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24) app_1 | at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3) app_1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3) app_1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) app_1 | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition. app_1 | at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11) app_1 | at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10) app_1 | at renderAsPlainText (file:///app/node_modules/@react-email/render/dist/node/index.mjs:79:33) app_1 | at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:68:12) app_1 | at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21) app_1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12) app_1 | at async Promise.all (index 1) app_1 | at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24) app_1 | at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3) app_1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3) app_1 | Error: Failed to render email app_1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:20:11) app_1 | at async Promise.all (index 0) app_1 | at async sendForgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-forgot-password.js:36:24) app_1 | at async forgotPassword (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/forgot-password.js:43:3) app_1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/auth/server/routes/email-password.js:207:3) app_1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) app_1 | at async handler (file:///app/node_modules/hono/dist/hono-base.js:94:39) app_1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) app_1 | at async Object.handler (file:///app/node_modules/hono/dist/validator/validator.js:81:12) app_1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) ``` ## COMPOSE: ``` services: database: image: postgres:15 environment: POSTGRES_USER: documenso POSTGRES_PASSWORD: PASSWORD POSTGRES_DB: documenso healthcheck: test: ["CMD-SHELL", "pg_isready -U documenso"] interval: 10s timeout: 5s retries: 5 ports: - "54320:5432" volumes: - ./postgres_data:/var/lib/postgresql/data app: image: documenso/documenso:latest depends_on: database: condition: service_healthy ports: - "3000:3000" environment: - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - NEXT_PRIVATE_ENCRYPTION_KEY=${NEXT_PRIVATE_ENCRYPTION_KEY} - NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY} - NEXT_PUBLIC_UPLOAD_TRANSPORT=${NEXT_PUBLIC_UPLOAD_TRANSPORT} - NEXT_PUBLIC_WEBAPP_URL=${NEXT_PUBLIC_WEBAPP_URL} - NEXT_PRIVATE_INTERNAL_WEBAPP_URL=${NEXT_PRIVATE_INTERNAL_WEBAPP_URL} - NEXT_PRIVATE_DATABASE_URL=${NEXT_PRIVATE_DATABASE_URL} - NEXT_PRIVATE_DIRECT_DATABASE_URL=${NEXT_PRIVATE_DIRECT_DATABASE_URL} - NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH} - NEXT_PRIVATE_SIGNING_PASSPHRASE=${NEXT_PRIVATE_SIGNING_PASSPHRASE} - NEXT_PRIVATE_SMTP_TRANSPORT=${NEXT_PRIVATE_SMTP_TRANSPORT} - NEXT_PRIVATE_SMTP_HOST=${NEXT_PRIVATE_SMTP_HOST} - NEXT_PRIVATE_SMTP_PORT=${NEXT_PRIVATE_SMTP_PORT} - NEXT_PRIVATE_SMTP_USERNAME=${NEXT_PRIVATE_SMTP_USERNAME} - NEXT_PRIVATE_SMTP_PASSWORD=${NEXT_PRIVATE_SMTP_PASSWORD} - NEXT_PRIVATE_SMTP_FROM_NAME=${NEXT_PRIVATE_SMTP_FROM_NAME} - NEXT_PRIVATE_SMTP_FROM_ADDRESS=${NEXT_PRIVATE_SMTP_FROM_ADDRESS} - NEXT_PRIVATE_SMTP_SECURE=${NEXT_PRIVATE_SMTP_SECURE} - NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=${NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS} - NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=${NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT} - DOCUMENSO_DISABLE_TELEMETRY=${DOCUMENSO_DISABLE_TELEMETRY} volumes: - VOLUME volumes: database: ``` ## ENV: ``` NEXTAUTH_SECRET=REDACT NEXT_PRIVATE_ENCRYPTION_KEY=REDACT NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=REDACT NEXT_PUBLIC_UPLOAD_TRANSPORT=database NEXT_PUBLIC_WEBAPP_URL=https://REDACT NEXT_PRIVATE_INTERNAL_WEBAPP_URL=https://REDACT (Same as Webapp) NEXT_PRIVATE_DATABASE_URL=postgres://documenso:REDACT@database:5432/documenso NEXT_PRIVATE_DIRECT_DATABASE_URL=postgres://documenso:REDACT@database:5432/documenso NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=REDACT NEXT_PRIVATE_SIGNING_PASSPHRASE=REDACT NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth NEXT_PRIVATE_SMTP_HOST=smtp.mailgun.org NEXT_PRIVATE_SMTP_PORT=587 NEXT_PRIVATE_SMTP_USERNAME=mailer@REDACT.com NEXT_PRIVATE_SMTP_PASSWORD=REDACT NEXT_PRIVATE_SMTP_FROM_NAME=REDACT NEXT_PRIVATE_SMTP_FROM_ADDRESS=REDACT NEXT_PRIVATE_SMTP_SECURE=false NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=false NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=50 DOCUMENSO_DISABLE_TELEMETRY=true ``` ### Steps to Reproduce Run the same compose with the same variables and you may get the same results ### Expected Behavior Emails are able to be sent ### Current Behavior Cannot render emails - no emails are being sent ### Screenshots (optional) _No response_ ### Operating System [e.g., Windows 10] Proxmox ### Browser [e.g., Chrome, Firefox] Chrome and Firefox ### Version [e.g., 2.0.1] _No response_ ### Please check the boxes that apply to this issue report. - [x] I have searched the existing issues to make sure this is not a duplicate. - [x] I have provided steps to reproduce the issue. - [x] I have included relevant environment information. - [ ] I have included any relevant screenshots. - [x] I understand that this is a voluntary contribution and that there is no guarantee of resolution. - [ ] I want to work on creating a PR for this issue if approved
kerem 2026-02-26 18:47:54 +03:00
Author
Owner

@github-actions[bot] commented on GitHub (Nov 26, 2025):

Thank you for opening your first issue and for being a part of the open signing revolution!

One of our team members will review it and get back to you as soon as it possible 💚

Meanwhile, please feel free to hop into our community in Discord

<!-- gh-comment-id:3579208509 --> @github-actions[bot] commented on GitHub (Nov 26, 2025): Thank you for opening your first issue and for being a part of the open signing revolution! <br /> One of our team members will review it and get back to you as soon as it possible 💚 <br /> Meanwhile, please feel free to hop into our community in [Discord](https://documen.so/discord)
Author
Owner

@saschabrockel commented on GitHub (Nov 29, 2025):

Unfortunately, I have the same error.

<!-- gh-comment-id:3590928434 --> @saschabrockel commented on GitHub (Nov 29, 2025): Unfortunately, I have the same error.
Author
Owner

@lotus-infosec commented on GitHub (Nov 29, 2025):

Unfortunately, I have the same error.

Hey! @saschabrockel are you using Cloudflare as a reverse proxy by chance?

<!-- gh-comment-id:3590930914 --> @lotus-infosec commented on GitHub (Nov 29, 2025): > Unfortunately, I have the same error. Hey! @saschabrockel are you using Cloudflare as a reverse proxy by chance?
Author
Owner

@saschabrockel commented on GitHub (Nov 29, 2025):

Cloudflare as a reverse proxy? My fault was that the Unraid template I used had errors. Some variables were doubled / empty then. That was the reason.

@lotus-infosec, and please try to use port 465 and set NEXT_PRIVATE_SMTP_SECURE=true. This works for me. I have been using so many self-hosted services, and normally port 587 works, but sometimes only port 465 works.

<!-- gh-comment-id:3590942584 --> @saschabrockel commented on GitHub (Nov 29, 2025): Cloudflare as a reverse proxy? My fault was that the Unraid template I used had errors. Some variables were doubled / empty then. That was the reason. @lotus-infosec, and please try to use port 465 and set `NEXT_PRIVATE_SMTP_SECURE=true`. This works for me. I have been using so many self-hosted services, and normally port 587 works, but sometimes only port 465 works.
Author
Owner

@lotus-infosec commented on GitHub (Nov 29, 2025):

Cloudflare as a reverse proxy? My fault was that the Unraid template I used had errors. Some variables were doubled / empty then. That was the reason.

@lotus-infosec, and please try to use port 465 and set NEXT_PRIVATE_SMTP_SECURE=true. This works for me. I have been using so many self-hosted services, and normally port 587 works, but sometimes only port 465 works.

@saschabrockel copy that, I'll give it a try, thank you!

<!-- gh-comment-id:3590981690 --> @lotus-infosec commented on GitHub (Nov 29, 2025): > Cloudflare as a reverse proxy? My fault was that the Unraid template I used had errors. Some variables were doubled / empty then. That was the reason. > > @lotus-infosec, and please try to use port 465 and set `NEXT_PRIVATE_SMTP_SECURE=true`. This works for me. I have been using so many self-hosted services, and normally port 587 works, but sometimes only port 465 works. @saschabrockel copy that, I'll give it a try, thank you!
Author
Owner

@teneburu commented on GitHub (Dec 5, 2025):

I currently have the same problem.
Documenso running behind an Nginx reverse proxy. Tried latest, v2.2.4, v2.2.3, v2.1.0.
First it complained about SMTP_HOST being a direct LAN IP, so I added my SMTP servers to the hosts in the compose file.

I had NEXT_PRIVATE_SMTP_SECURE=false and NEXT_PRIVATE_SMTP_PORT=26.

This sanity check docker compose exec documenso sh -lc 'getent hosts redacted.org && openssl s_client -connect redacted.org:{26,465} -starttls smtp -servername redacted.org -brief' returns established connection.

I changed my SMTP_PORT to 465 and SMTP_SECURE to true, it did not fix the problem.

No duplicate env variables come up when doing this docker compose config > resolved.yaml and cat resolved.yaml.

I don't understand where you guys are coming from, why would proxy or smtp envs be the cause of a mail rendering issue with this stack trace ?

ENV:

PORT=3000

NEXT_PRIVATE_DATABASE_URL="postgres://REDACTED:REDACTED@REDACTED:5432/REDACTED"
NEXT_PRIVATE_DIRECT_DATABASE_URL="$NEXT_PRIVATE_DATABASE_URL"

NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth
NEXT_PRIVATE_SMTP_HOST="REDACTED"
NEXT_PRIVATE_SMTP_PORT=465
NEXT_PRIVATE_SMTP_USERNAME="no-reply@REDACTED"
NEXT_PRIVATE_SMTP_PASSWORD="REDACTED"
NEXT_PRIVATE_SMTP_FROM_NAME=REDACTED
NEXT_PRIVATE_SMTP_FROM_ADDRESS="no-reply@REDACTED"
NEXT_PRIVATE_SMTP_SECURE=true

NEXTAUTH_SECRET="REDACTED"
NEXT_PRIVATE_ENCRYPTION_KEY="REDACTED" 
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY="REDACTED" 
NEXT_PUBLIC_WEBAPP_URL=https://sign.redacted.org
NEXT_PRIVATE_SIGNING_PASSPHRASE="REDACTED"
NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12

COMPOSE:

root@docker ~/documenso # cat compose.yml
name: documenso-production

services:
  documenso:
    image: documenso/documenso:latest
    extra_hosts:
      - "REDACTED:10.0....."
    environment:
      - DOCUMENSO_DISABLE_TELEMETRY=true
      - PORT=${PORT:-3000}
      - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?err}
      - NEXT_PRIVATE_ENCRYPTION_KEY=${NEXT_PRIVATE_ENCRYPTION_KEY:?err}
      - NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY:?err}
      - NEXT_PRIVATE_GOOGLE_CLIENT_ID=${NEXT_PRIVATE_GOOGLE_CLIENT_ID}
      - NEXT_PRIVATE_GOOGLE_CLIENT_SECRET=${NEXT_PRIVATE_GOOGLE_CLIENT_SECRET}
      - NEXT_PUBLIC_WEBAPP_URL=${NEXT_PUBLIC_WEBAPP_URL:?err}
      - NEXT_PRIVATE_INTERNAL_WEBAPP_URL=${NEXT_PRIVATE_INTERNAL_WEBAPP_URL:-http://localhost:$PORT}
      - NEXT_PRIVATE_DATABASE_URL=${NEXT_PRIVATE_DATABASE_URL:?err}
      - NEXT_PRIVATE_DIRECT_DATABASE_URL=${NEXT_PRIVATE_DIRECT_DATABASE_URL:-${NEXT_PRIVATE_DATABASE_URL}}
      - NEXT_PUBLIC_UPLOAD_TRANSPORT=${NEXT_PUBLIC_UPLOAD_TRANSPORT:-database}
      - NEXT_PRIVATE_UPLOAD_ENDPOINT=${NEXT_PRIVATE_UPLOAD_ENDPOINT}
      - NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE=${NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE}
      - NEXT_PRIVATE_UPLOAD_REGION=${NEXT_PRIVATE_UPLOAD_REGION}
      - NEXT_PRIVATE_UPLOAD_BUCKET=${NEXT_PRIVATE_UPLOAD_BUCKET}
      - NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID=${NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID}
      - NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY=${NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY}
      - NEXT_PRIVATE_SMTP_TRANSPORT=${NEXT_PRIVATE_SMTP_TRANSPORT:?err}
      - NEXT_PRIVATE_SMTP_HOST=${NEXT_PRIVATE_SMTP_HOST}
      - NEXT_PRIVATE_SMTP_PORT=${NEXT_PRIVATE_SMTP_PORT}
      - NEXT_PRIVATE_SMTP_USERNAME=${NEXT_PRIVATE_SMTP_USERNAME}
      - NEXT_PRIVATE_SMTP_PASSWORD=${NEXT_PRIVATE_SMTP_PASSWORD}
      - NEXT_PRIVATE_SMTP_APIKEY_USER=${NEXT_PRIVATE_SMTP_APIKEY_USER}
      - NEXT_PRIVATE_SMTP_APIKEY=${NEXT_PRIVATE_SMTP_APIKEY}
      - NEXT_PRIVATE_SMTP_SECURE=${NEXT_PRIVATE_SMTP_SECURE}
      - NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=${NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS}
      - NEXT_PRIVATE_SMTP_FROM_NAME=${NEXT_PRIVATE_SMTP_FROM_NAME:?err}
      - NEXT_PRIVATE_SMTP_FROM_ADDRESS=${NEXT_PRIVATE_SMTP_FROM_ADDRESS:?err}
      - NEXT_PRIVATE_SMTP_SERVICE=${NEXT_PRIVATE_SMTP_SERVICE}
      - NEXT_PRIVATE_RESEND_API_KEY=${NEXT_PRIVATE_RESEND_API_KEY}
      - NEXT_PRIVATE_MAILCHANNELS_API_KEY=${NEXT_PRIVATE_MAILCHANNELS_API_KEY}
      - NEXT_PRIVATE_MAILCHANNELS_ENDPOINT=${NEXT_PRIVATE_MAILCHANNELS_ENDPOINT}
      - NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN=${NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN}
      - NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR=${NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR}
      - NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY=${NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY}
      - NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=${NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT}
      - NEXT_PUBLIC_POSTHOG_KEY=${NEXT_PUBLIC_POSTHOG_KEY}
      - NEXT_PUBLIC_DISABLE_SIGNUP=${NEXT_PUBLIC_DISABLE_SIGNUP}
      - NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH:-/opt/documenso/cert.p12}
      - NEXT_PRIVATE_SIGNING_PASSPHRASE=${NEXT_PRIVATE_SIGNING_PASSPHRASE}
      - NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS=${NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS}
    ports:
      - ${PORT:-3000}:${PORT:-3000}
    volumes:
      - /opt/documenso/cert.p12:/opt/documenso/cert.p12:ro

volumes: {}

LOGS:

documenso-1  | 🌟 Starting Documenso server...
documenso-1  | [Telemetry] Telemetry is disabled. To enable, remove the DOCUMENSO_DISABLE_TELEMETRY environment variable.
documenso-1  | [JOBS]: Triggering job send.signup.confirmation.email with payload { email: 'REDACTED@proton.me' }
documenso-1  | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
documenso-1  |     at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11)
documenso-1  |     at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10)
documenso-1  |     at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33)
documenso-1  |     at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21)
documenso-1  |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12)
documenso-1  |     at async Promise.all (index 0)
documenso-1  |     at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24)
documenso-1  |     at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5)
documenso-1  |     at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3)
documenso-1  |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5)
documenso-1  | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
documenso-1  |     at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11)
documenso-1  |     at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10)
documenso-1  |     at renderAsPlainText (file:///app/node_modules/@react-email/render/dist/node/index.mjs:79:33)
documenso-1  |     at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:68:12)
documenso-1  |     at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21)
documenso-1  |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12)
documenso-1  |     at async Promise.all (index 1)
documenso-1  |     at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24)
documenso-1  |     at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5)
documenso-1  |     at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3)
documenso-1  | Error: Failed to render email
documenso-1  |     at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:20:11)
documenso-1  |     at async Promise.all (index 0)
documenso-1  |     at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24)
documenso-1  |     at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5)
documenso-1  |     at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3)
documenso-1  |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5)
documenso-1  |     at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/client/local.js:101:9
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  |     at async file:///app/apps/remix/build/server/hono/server/router.js:78:3
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  | [JOBS]: Job send.signup.confirmation.email failed Error: Failed to send the confirmation email
documenso-1  |     at sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:54:11)
documenso-1  |     at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3)
documenso-1  |     at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5)
documenso-1  |     at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/client/local.js:101:9
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  |     at async file:///app/apps/remix/build/server/hono/server/router.js:78:3
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  |     at async requestId2 (file:///app/node_modules/hono/dist/middleware/request-id/request-id.js:16:5)
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  |     at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17)
documenso-1  | Submitting job to endpoint: http://localhost:3000/api/jobs/send.signup.confirmation.email/cmit03bhg0000p71qipc718c0
documenso-1  | [JOBS]: Triggering job send.signup.confirmation.email with payload { email: 'REDACTED@proton.me' }

I'm at my wits end. God bless any helper

<!-- gh-comment-id:3617508412 --> @teneburu commented on GitHub (Dec 5, 2025): I currently have the same problem. Documenso running behind an Nginx reverse proxy. Tried latest, v2.2.4, v2.2.3, v2.1.0. First it complained about SMTP_HOST being a direct LAN IP, so I added my SMTP servers to the hosts in the compose file. I had `NEXT_PRIVATE_SMTP_SECURE=false` and `NEXT_PRIVATE_SMTP_PORT=26`. This sanity check `docker compose exec documenso sh -lc 'getent hosts redacted.org && openssl s_client -connect redacted.org:{26,465} -starttls smtp -servername redacted.org -brief'` returns established connection. I changed my SMTP_PORT to 465 and SMTP_SECURE to true, it did not fix the problem. No duplicate env variables come up when doing this `docker compose config > resolved.yaml` and `cat resolved.yaml`. I don't understand where you guys are coming from, why would proxy or smtp envs be the cause of a mail rendering issue with this stack trace ? ENV: ``` PORT=3000 NEXT_PRIVATE_DATABASE_URL="postgres://REDACTED:REDACTED@REDACTED:5432/REDACTED" NEXT_PRIVATE_DIRECT_DATABASE_URL="$NEXT_PRIVATE_DATABASE_URL" NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth NEXT_PRIVATE_SMTP_HOST="REDACTED" NEXT_PRIVATE_SMTP_PORT=465 NEXT_PRIVATE_SMTP_USERNAME="no-reply@REDACTED" NEXT_PRIVATE_SMTP_PASSWORD="REDACTED" NEXT_PRIVATE_SMTP_FROM_NAME=REDACTED NEXT_PRIVATE_SMTP_FROM_ADDRESS="no-reply@REDACTED" NEXT_PRIVATE_SMTP_SECURE=true NEXTAUTH_SECRET="REDACTED" NEXT_PRIVATE_ENCRYPTION_KEY="REDACTED"  NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY="REDACTED"  NEXT_PUBLIC_WEBAPP_URL=https://sign.redacted.org NEXT_PRIVATE_SIGNING_PASSPHRASE="REDACTED" NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12 ``` COMPOSE: ``` root@docker ~/documenso # cat compose.yml name: documenso-production services: documenso: image: documenso/documenso:latest extra_hosts: - "REDACTED:10.0....." environment: - DOCUMENSO_DISABLE_TELEMETRY=true - PORT=${PORT:-3000} - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?err} - NEXT_PRIVATE_ENCRYPTION_KEY=${NEXT_PRIVATE_ENCRYPTION_KEY:?err} - NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY:?err} - NEXT_PRIVATE_GOOGLE_CLIENT_ID=${NEXT_PRIVATE_GOOGLE_CLIENT_ID} - NEXT_PRIVATE_GOOGLE_CLIENT_SECRET=${NEXT_PRIVATE_GOOGLE_CLIENT_SECRET} - NEXT_PUBLIC_WEBAPP_URL=${NEXT_PUBLIC_WEBAPP_URL:?err} - NEXT_PRIVATE_INTERNAL_WEBAPP_URL=${NEXT_PRIVATE_INTERNAL_WEBAPP_URL:-http://localhost:$PORT} - NEXT_PRIVATE_DATABASE_URL=${NEXT_PRIVATE_DATABASE_URL:?err} - NEXT_PRIVATE_DIRECT_DATABASE_URL=${NEXT_PRIVATE_DIRECT_DATABASE_URL:-${NEXT_PRIVATE_DATABASE_URL}} - NEXT_PUBLIC_UPLOAD_TRANSPORT=${NEXT_PUBLIC_UPLOAD_TRANSPORT:-database} - NEXT_PRIVATE_UPLOAD_ENDPOINT=${NEXT_PRIVATE_UPLOAD_ENDPOINT} - NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE=${NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE} - NEXT_PRIVATE_UPLOAD_REGION=${NEXT_PRIVATE_UPLOAD_REGION} - NEXT_PRIVATE_UPLOAD_BUCKET=${NEXT_PRIVATE_UPLOAD_BUCKET} - NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID=${NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID} - NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY=${NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY} - NEXT_PRIVATE_SMTP_TRANSPORT=${NEXT_PRIVATE_SMTP_TRANSPORT:?err} - NEXT_PRIVATE_SMTP_HOST=${NEXT_PRIVATE_SMTP_HOST} - NEXT_PRIVATE_SMTP_PORT=${NEXT_PRIVATE_SMTP_PORT} - NEXT_PRIVATE_SMTP_USERNAME=${NEXT_PRIVATE_SMTP_USERNAME} - NEXT_PRIVATE_SMTP_PASSWORD=${NEXT_PRIVATE_SMTP_PASSWORD} - NEXT_PRIVATE_SMTP_APIKEY_USER=${NEXT_PRIVATE_SMTP_APIKEY_USER} - NEXT_PRIVATE_SMTP_APIKEY=${NEXT_PRIVATE_SMTP_APIKEY} - NEXT_PRIVATE_SMTP_SECURE=${NEXT_PRIVATE_SMTP_SECURE} - NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=${NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS} - NEXT_PRIVATE_SMTP_FROM_NAME=${NEXT_PRIVATE_SMTP_FROM_NAME:?err} - NEXT_PRIVATE_SMTP_FROM_ADDRESS=${NEXT_PRIVATE_SMTP_FROM_ADDRESS:?err} - NEXT_PRIVATE_SMTP_SERVICE=${NEXT_PRIVATE_SMTP_SERVICE} - NEXT_PRIVATE_RESEND_API_KEY=${NEXT_PRIVATE_RESEND_API_KEY} - NEXT_PRIVATE_MAILCHANNELS_API_KEY=${NEXT_PRIVATE_MAILCHANNELS_API_KEY} - NEXT_PRIVATE_MAILCHANNELS_ENDPOINT=${NEXT_PRIVATE_MAILCHANNELS_ENDPOINT} - NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN=${NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN} - NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR=${NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR} - NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY=${NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY} - NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=${NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT} - NEXT_PUBLIC_POSTHOG_KEY=${NEXT_PUBLIC_POSTHOG_KEY} - NEXT_PUBLIC_DISABLE_SIGNUP=${NEXT_PUBLIC_DISABLE_SIGNUP} - NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH:-/opt/documenso/cert.p12} - NEXT_PRIVATE_SIGNING_PASSPHRASE=${NEXT_PRIVATE_SIGNING_PASSPHRASE} - NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS=${NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS} ports: - ${PORT:-3000}:${PORT:-3000} volumes: - /opt/documenso/cert.p12:/opt/documenso/cert.p12:ro volumes: {} ``` LOGS: ``` documenso-1 | 🌟 Starting Documenso server... documenso-1 | [Telemetry] Telemetry is disabled. To enable, remove the DOCUMENSO_DISABLE_TELEMETRY environment variable. documenso-1 | [JOBS]: Triggering job send.signup.confirmation.email with payload { email: 'REDACTED@proton.me' } documenso-1 | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition. documenso-1 | at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11) documenso-1 | at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10) documenso-1 | at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33) documenso-1 | at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21) documenso-1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12) documenso-1 | at async Promise.all (index 0) documenso-1 | at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24) documenso-1 | at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5) documenso-1 | at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3) documenso-1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5) documenso-1 | Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition. documenso-1 | at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11) documenso-1 | at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10) documenso-1 | at renderAsPlainText (file:///app/node_modules/@react-email/render/dist/node/index.mjs:79:33) documenso-1 | at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:68:12) documenso-1 | at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21) documenso-1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12) documenso-1 | at async Promise.all (index 1) documenso-1 | at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24) documenso-1 | at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5) documenso-1 | at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3) documenso-1 | Error: Failed to render email documenso-1 | at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:20:11) documenso-1 | at async Promise.all (index 0) documenso-1 | at async sendConfirmationEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/auth/send-confirmation-email.js:39:24) documenso-1 | at async sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:46:5) documenso-1 | at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3) documenso-1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5) documenso-1 | at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/client/local.js:101:9 documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | at async file:///app/apps/remix/build/server/hono/server/router.js:78:3 documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | [JOBS]: Job send.signup.confirmation.email failed Error: Failed to send the confirmation email documenso-1 | at sendConfirmationToken (file:///app/apps/remix/build/server/hono/packages/lib/server-only/user/send-confirmation-token.js:54:11) documenso-1 | at async Module.run (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.handler.js:6:3) documenso-1 | at async Object.handler (file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/emails/send-confirmation-email.js:20:5) documenso-1 | at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/client/local.js:101:9 documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | at async file:///app/apps/remix/build/server/hono/server/router.js:78:3 documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | at async requestId2 (file:///app/node_modules/hono/dist/middleware/request-id/request-id.js:16:5) documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | at async dispatch (file:///app/node_modules/hono/dist/compose.js:22:17) documenso-1 | Submitting job to endpoint: http://localhost:3000/api/jobs/send.signup.confirmation.email/cmit03bhg0000p71qipc718c0 documenso-1 | [JOBS]: Triggering job send.signup.confirmation.email with payload { email: 'REDACTED@proton.me' } ``` I'm at my wits end. God bless any helper
Author
Owner

@teneburu commented on GitHub (Dec 5, 2025):

Was your trial successful ? @lotus-infosec

<!-- gh-comment-id:3617614998 --> @teneburu commented on GitHub (Dec 5, 2025): Was your trial successful ? @lotus-infosec
Author
Owner

@Mythie commented on GitHub (Dec 8, 2025):

Resolved with https://github.com/documenso/documenso/pull/2297

It'll be published in v2.2.5 later today

<!-- gh-comment-id:3624184569 --> @Mythie commented on GitHub (Dec 8, 2025): Resolved with https://github.com/documenso/documenso/pull/2297 It'll be published in v2.2.5 later today
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/documenso#648
No description provided.