Commit Graph
51 Commits
Author SHA1 Message Date
rustmailer dd3d66d7cd fix: resolve sync deadlock, add runtime watchdog, and relax disabled-account reads
- 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
2026-08-21 05:14:23 +08:00
rustmailer 8d0b4919c4 feat: support email drafts - create & send
- OpenAPI & gRPC endpoints
- IMAP/Gmail API/Graph API implementations
2026-07-20 20:56:51 +08:00
SanderBaan 206e16381b Update flags locally when flags are updated 2026-03-26 18:04:03 +01:00
rustmailer ce527d3025 Update license headers and copyright year to 2025-2026 2026-03-10 01:40:50 +08:00
rustmailer d0a6fdd347 fix: Remove max length validation for text and html in AppendReplyToDraftRequest
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.
2026-02-12 01:55:46 +08:00
rustmailer 7b5b57bb34 Update payload.rs 2026-02-05 02:29:09 +08:00
rustmailer a6854396be feat(graph): support sending, replying, and forwarding emails 2026-02-04 00:37:07 +08:00
rustmailer 870d69f1de feat: feat: add Graph API compatibility for attachment download 2026-01-20 13:03:20 +08:00
rustmailer c4b0527f25 feat: Handle missing Settings.Read scope in tag-messages endpoint
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.
2025-12-31 01:48:44 +08:00
rustmailer 651a6302b7 chore: Make category creation best-effort by logging errors instead of failing the operation 2025-12-25 14:21:55 +08:00
rustmailer ff89ee8bbc Update tags.rs 2025-12-16 15:01:02 +08:00
rustmailer 906447bfc4 feat: add reply-all option to reply draft creation 2025-12-11 02:02:05 +08:00
rustmailer 2b531ff09f feat: add tag color support for Gmail and Microsoft Graph accounts 2025-12-11 01:29:06 +08:00
rustmailer 49ba67a7d2 feat(thread): Add support for fetching thread lists and thread messages from remote in Gmail and Graph API 2025-12-03 02:43:02 +08:00
rustmailer 74cd2ab96f feat(graph api): Support Graph API for fetch_remote_messages 2025-11-22 22:38:09 +08:00
rustmailer f9857fe9ae feat(api): Introduce unified tag-messages interface for mail tagging
Introduces a new `/tag-messages` API endpoint that provides a consistent, unified capability for setting tags (Labels/Categories/Keywords) across different mailer types.
2025-11-21 12:58:58 +08:00
rustmailer 1ca23d30a3 Handle Graph API deserialization errors with detailed logging 2025-11-11 20:10:58 +08:00
rustmailer bd9d161559 feat: Implement Outlook API email deletion support 2025-11-05 14:06:52 +08:00
rustmailer 8bb5c0f7a7 feat: Make /move-messages and /copy-messages compatible with Graph API accounts 2025-11-05 11:54:35 +08:00
rustmailer d4645ea9d6 feat: Make /get-thread-messages and /list-threads compatible with Graph API accounts 2025-11-05 10:26:02 +08:00
rustmailer c2ec7e869f feat(outlook): implement retrieve_outlook_raw_email to fetch and save EML via Graph API 2025-11-05 09:55:49 +08:00
rustmailer 690c289aac feat: append-reply-to-draft supports Graph API
- 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
2025-10-30 20:45:25 +08:00
rustmailer 64b57f4ac2 feat: add GraphAPI account support for message-content endpoint 2025-10-30 06:37:12 +08:00
rustmailer bbcc1348ff feat(graph): add Graph API support and GraphAPI account type 2025-10-28 19:39:49 +08:00
rustmailer 7522ffc289 feat: add folder_limit per account
- 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
2025-10-18 15:23:58 +08:00
rustmailer 3096208b59 fix(sync): optimize account cache cleanup during full sync to prevent potential thread blocking 2025-10-15 10:40:45 +08:00
rustmailer bd6efb153c refactor: merge uid and mid into a single id field in EmailAddedToFolder and EmailEnvelopeV3 2025-10-08 12:05:31 +08:00
rustmailer 95c2e960b2 update 2025-10-05 16:05:30 +08:00
rustmailer 60041ee59f feat: unify UID/MID and UIDs/MIDs into single id/ids fields 2025-10-03 21:20:04 +08:00
rustmailer e6225d13bd fix(api): remove mailbox/label filtering so that get-thread-messages returns full conversation threads across INBOX and SENT 2025-10-01 00:55:01 +08:00
rustmailer 16c84abe67 refactor(list-messages): switch from page-based to cursor-based pagination
- 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
2025-09-28 07:39:40 +08:00
rustmailer 08ef77c23c feat(gmail): make search API 2025-09-24 13:30:25 +08:00
rustmailer 4c00e45657 refactor(gmail): switch Gmail account message deletion to batch API for efficiency 2025-09-24 13:29:49 +08:00
rustmailer 40e8004f4f feat(mail): add raw email retrieval support for Gmail API accounts 2025-09-20 03:37:57 +08:00
rustmailer 05af9e82e9 feat(mailbox): extend MailboxTransferRequest for Gmail API support 2025-09-18 06:41:41 +08:00
rustmailer 0a038ffe94 feat(gmail): add compatibility for Gmail API send message endpoint 2025-09-17 09:56:04 +08:00
rustmailer 16ccdb00b7 feat(mail): make message deletion API compatible with Gmail API 2025-09-15 06:44:15 +08:00
rustmailer ee7f0673c7 fix: normalize URL-safe base64 to standard base64 when decoding 2025-09-09 04:18:51 +08:00
rustmailer 9d612ad81d Adapt Gmail API accounts: fetch email content & attachments, webhook for new emails, and frontend support 2025-09-08 11:03:00 +08:00
rustmailer b5fba610d9 feat(search): unify search interface with Gmail API compatibility 2025-09-05 04:38:39 +08:00
rustmailer a849c20d97 feat: add support for creating reply drafts in Gmail API accounts 2025-09-04 04:22:50 +08:00
rustmailer 7926ba7a46 feat(gmail): add list_threads & get_thread_message support 2025-09-04 02:20:52 +08:00
rustmailer 20e1a1cc4e refactor(gmail): update account sync logic and related files 2025-09-03 20:17:30 +08:00
rustmailer 7411233b48 feat: Add Gmail API sync workflow and integrate related data models 2025-09-01 23:50:00 +08:00
rustmailer fd64acc24f feat(account): add MailerType to support Gmail API and other mailers
- Introduced `MailerType` enum in Account model
- Enables selection of different mailer backends (e.g., Gmail API)
2025-08-28 03:20:49 +08:00
rustmailer c2996d9e39 feat(api): add HTTP and gRPC endpoints for appending a reply draft email
- 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.
2025-08-12 21:31:06 +08:00
rustmailer 7ba24b45b2 feat: add email thread related APIs and data structures
- 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
2025-08-10 05:11:41 +08:00
rustmailer 76139344fb chore(legal): add copyright/license headers to all source files 2025-07-29 02:02:08 +08:00
rustmailer c46b41b657 feat: add email-based message search API (OpenAPI + gRPC) with new index table
- 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
2025-07-26 04:18:35 +08:00
rustmailer 0dbaaa865f fix(imap): fix nested OR conditions parentheses
- Correctly generate IMAP syntax for nested OR conditions (e.g. `OR (OR A B) C`)
- Add tests for complex logic combinations
2025-07-25 10:43:32 +08:00