- Changed login implementation to use plaintext password
- Added reset root password API endpoint integration
- Implemented UI for resetting root password with validation
- Batch insert remote mailboxes before full synchronization so that
mailbox metadata is queryable as soon as possible.
- If synchronization of a mailbox fails, remove it to prevent
stale or inconsistent local data.
- Add `ExternalOAuth2Request` validation to ensure mutual dependency between
`oauth2_id` and `refresh_token`.
- Upsert external OAuth2 tokens for an account:
- If only `access_token` is provided, RustMailer stores it directly.
- If both `oauth2_id` and `refresh_token` are provided, RustMailer can refresh
the access token using stored client credentials.
- Update REST API endpoint to `configure_external_oauth2` with proper OpenAPI docs.
- Add gRPC `ExternalOAuth2Request` message and corresponding `UpsertExternalOAuth2Token` RPC.
- 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
- Ensure `LICENSE` and `license.html` are included in build artifacts
- Extracted build output into `docker/` as Docker context
- Updated Dockerfile to COPY `LICENSE` and `license.html` into image
- License list generated from accepted SPDX identifiers
- 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