- upgrade redb 2.6.2 -> 2.6.3 to fix the range() iterator hang that froze
the whole process during stale-envelope cleanup
- add runtime watchdog: independent OS thread aborts the process (exit 1)
when the tokio heartbeat stalls, so orchestrators can restart it
- make find_impl async via spawn_blocking so a stuck DB lock cannot pin
API workers (configurable via RUSTMAILER_WATCHDOG_TIMEOUT_SECS)
- oauth2: soft-disable token refresh when the OAuth2 config is disabled
(keep token, stop refreshing) instead of failing with
SecondaryKeyConstraintMismatch; remove delete_by_oauth2_id
- allow local-cache reads for disabled accounts (mailboxes, message list,
content, attachments); keep remote operations blocked
- include disabled accounts in minimal_list; keepalive and gRPC still
filter by enabled
- frontend: 403 no longer navigates to /403 or retries in a loop; show a
"account disabled" toast and stop loading content
Inline threading can cause reply bodies (especially HTML with inline images)
to grow beyond the previous 10k/50k limits. Removing max_length validation
avoids request parsing failures and defers size limits to higher layers.
Allow the tag-messages endpoint to run normally when the user has not authorized the Settings.Read scope, avoiding errors and handling the case gracefully.
Introduces a new `/tag-messages` API endpoint that provides a consistent, unified capability for setting tags (Labels/Categories/Keywords) across different mailer types.
- Adjust AppendReplyToDraft request payload:
* `mailbox` is only required for IMAP accounts; Graph API ignores it
* Remove `draft_folder_path`; IMAP automatically uses `mailbox` attribute to filter
- API now returns `ReplyDraft` containing:
* `id` of the created draft
* mailbox name of the draft
- Add `folder_limit` field to account model
- Support limiting sync per folder/label for both IMAP and Gmail API accounts
- Ensures each folder/label syncs at most `folder_limit` messages
- Changed `list-messages` API from page/page_size to cursor/next_page_token
- Aligns pagination approach with Gmail API for easier integration
- Frontend updates to handle cursor-based navigation
- Added REST endpoint `POST /append-reply-to-draft/:account_id` that creates a reply draft linked to the original email thread with appropriate headers (`References`, `In-Reply-To`).
- Added equivalent gRPC method for creating and appending reply drafts.
- Add two new APIs to list email threads and fetch all messages within a thread
- Create a new email thread table to store thread information
- Implement method to extract thread_id from emails to support thread association queries
- Added unified search interface to query messages by email address
- Implemented both OpenAPI and gRPC endpoints
- Introduced new index table to optimize email-based lookups