[PR #2521] feat: move email sending into background jobs for retry support #2364

Open
opened 2026-02-26 20:33:33 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/documenso/documenso/pull/2521
Author: @Mythie
Created: 2/20/2026
Status: 🔄 Open

Base: mainHead: fix/extract-emails


📝 Commits (1)

  • 844af17 feat: move email sending into background jobs for retry support

📊 Changes

28 files changed (+1081 additions, -442 deletions)

View changed files

📝 packages/lib/jobs/client.ts (+18 -0)
packages/lib/jobs/definitions/emails/send-2fa-token-email.handler.ts (+133 -0)
packages/lib/jobs/definitions/emails/send-2fa-token-email.ts (+32 -0)
packages/lib/jobs/definitions/emails/send-completed-email.handler.ts (+20 -0)
packages/lib/jobs/definitions/emails/send-completed-email.ts (+33 -0)
packages/lib/jobs/definitions/emails/send-direct-template-created-email.handler.ts (+105 -0)
packages/lib/jobs/definitions/emails/send-direct-template-created-email.ts (+33 -0)
📝 packages/lib/jobs/definitions/emails/send-document-cancelled-emails.handler.ts (+30 -32)
packages/lib/jobs/definitions/emails/send-document-super-delete-email.handler.ts (+68 -0)
packages/lib/jobs/definitions/emails/send-document-super-delete-email.ts (+34 -0)
packages/lib/jobs/definitions/emails/send-forgot-password-email.handler.ts (+72 -0)
packages/lib/jobs/definitions/emails/send-forgot-password-email.ts (+31 -0)
📝 packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts (+28 -33)
📝 packages/lib/jobs/definitions/emails/send-organisation-member-left-email.handler.ts (+27 -32)
packages/lib/jobs/definitions/emails/send-pending-email.handler.ts (+20 -0)
packages/lib/jobs/definitions/emails/send-pending-email.ts (+32 -0)
📝 packages/lib/jobs/definitions/emails/send-recipient-signed-email.handler.ts (+18 -20)
packages/lib/jobs/definitions/emails/send-resend-document-email.handler.ts (+215 -0)
packages/lib/jobs/definitions/emails/send-resend-document-email.ts (+35 -0)
📝 packages/lib/jobs/definitions/internal/seal-document.handler.ts (+12 -12)

...and 8 more files

📄 Description

Each direct mailer.sendMail() call is replaced by a dedicated background
job so that email delivery failures can be retried independently.

New jobs: send-pending-email, send-completed-email, send-forgot-password-email,
send-document-super-delete-email, send-recipient-removed-email,
send-document-deleted-emails, send-2fa-token-email, send-resend-document-email,
send-direct-template-created-email.

Existing handlers (send-document-cancelled-emails, send-organisation-member-*,
send-recipient-signed-email) have io.runTask wrappers removed since they
interfere with the job scheduler. Job triggers are dispatched after
transactions commit to avoid race conditions with uncommitted data.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/documenso/documenso/pull/2521 **Author:** [@Mythie](https://github.com/Mythie) **Created:** 2/20/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/extract-emails` --- ### 📝 Commits (1) - [`844af17`](https://github.com/documenso/documenso/commit/844af17ec25c7b6611dfc61b97259ef45fcfaeb5) feat: move email sending into background jobs for retry support ### 📊 Changes **28 files changed** (+1081 additions, -442 deletions) <details> <summary>View changed files</summary> 📝 `packages/lib/jobs/client.ts` (+18 -0) ➕ `packages/lib/jobs/definitions/emails/send-2fa-token-email.handler.ts` (+133 -0) ➕ `packages/lib/jobs/definitions/emails/send-2fa-token-email.ts` (+32 -0) ➕ `packages/lib/jobs/definitions/emails/send-completed-email.handler.ts` (+20 -0) ➕ `packages/lib/jobs/definitions/emails/send-completed-email.ts` (+33 -0) ➕ `packages/lib/jobs/definitions/emails/send-direct-template-created-email.handler.ts` (+105 -0) ➕ `packages/lib/jobs/definitions/emails/send-direct-template-created-email.ts` (+33 -0) 📝 `packages/lib/jobs/definitions/emails/send-document-cancelled-emails.handler.ts` (+30 -32) ➕ `packages/lib/jobs/definitions/emails/send-document-super-delete-email.handler.ts` (+68 -0) ➕ `packages/lib/jobs/definitions/emails/send-document-super-delete-email.ts` (+34 -0) ➕ `packages/lib/jobs/definitions/emails/send-forgot-password-email.handler.ts` (+72 -0) ➕ `packages/lib/jobs/definitions/emails/send-forgot-password-email.ts` (+31 -0) 📝 `packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts` (+28 -33) 📝 `packages/lib/jobs/definitions/emails/send-organisation-member-left-email.handler.ts` (+27 -32) ➕ `packages/lib/jobs/definitions/emails/send-pending-email.handler.ts` (+20 -0) ➕ `packages/lib/jobs/definitions/emails/send-pending-email.ts` (+32 -0) 📝 `packages/lib/jobs/definitions/emails/send-recipient-signed-email.handler.ts` (+18 -20) ➕ `packages/lib/jobs/definitions/emails/send-resend-document-email.handler.ts` (+215 -0) ➕ `packages/lib/jobs/definitions/emails/send-resend-document-email.ts` (+35 -0) 📝 `packages/lib/jobs/definitions/internal/seal-document.handler.ts` (+12 -12) _...and 8 more files_ </details> ### 📄 Description Each direct mailer.sendMail() call is replaced by a dedicated background job so that email delivery failures can be retried independently. New jobs: send-pending-email, send-completed-email, send-forgot-password-email, send-document-super-delete-email, send-recipient-removed-email, send-document-deleted-emails, send-2fa-token-email, send-resend-document-email, send-direct-template-created-email. Existing handlers (send-document-cancelled-emails, send-organisation-member-*, send-recipient-signed-email) have io.runTask wrappers removed since they interfere with the job scheduler. Job triggers are dispatched after transactions commit to avoid race conditions with uncommitted data. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
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#2364
No description provided.