Add qq-mail extension#27293
Conversation
|
Congratulations on your new Raycast extension! 🚀 We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
Greptile SummaryThis PR adds a new QQ Mail extension that connects to QQ's IMAP/SMTP servers, providing inbox browsing, email composition, attachment downloads, folder navigation, and optimistic read/unread toggling.
Confidence Score: 3/5Not ready to merge — the attachment filter produces a broken pagination experience and the changelog has a copy-paste error that must be fixed. Two P1 issues are present: a logic bug that causes the 'Has Attachment' filter to stop loading emails after the first UID window, and a changelog that was clearly copied from a different extension. Both should be resolved before merging. extensions/qq-mail/src/imap-client.ts (attachment pagination logic) and extensions/qq-mail/CHANGELOG.md (wrong title and date placeholder) Important Files Changed
Prompt To Fix All With AIThis is a comment left during a code review.
Path: extensions/qq-mail/CHANGELOG.md
Line: 1-3
Comment:
**Copy-paste artifact and wrong date placeholder**
The changelog title is `Proton Mail Changelog` (copied from another extension) and the date uses a hardcoded value instead of the required `{PR_MERGE_DATE}` placeholder. Both violate the standard Raycast changelog convention.
```suggestion
# QQ Mail Changelog
## [Initial Release] - {PR_MERGE_DATE}
```
**Rule Used:** What: In Raycast extension changelogs, `{PR_MERGE_... ([source](https://app.greptile.com/review/custom-context?memory=799af734-ebd9-4b40-9ffd-97a70fc71c8a))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/qq-mail/src/imap-client.ts
Line: 136-158
Comment:
**Attachment filter breaks pagination prematurely**
When `filter === "attachment"`, the function fetches `limit` UIDs by position (`slice(offset, offset + limit)`) and then discards non-attachment emails in-memory. If the first page of 20 emails contains only 3 with attachments, the function returns 3 emails. The caller then does `if (moreEmails.length < pageSize) setHasMore(false)` → `3 < 20` → pagination stops, even though hundreds of attachment-bearing emails may remain further in the mailbox. Users will see only the handful of attachment emails that happened to land in the first UID window.
A correct approach is to either (a) use a server-side IMAP search for `HEADER Content-Disposition attachment` to get only matching UIDs before slicing, or (b) keep fetching until `limit` matching emails are collected or UIDs are exhausted.
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/qq-mail/src/smtp-client.ts
Line: 7-28
Comment:
**Stale transporter when credentials change**
`transporterInstance` is a module-level singleton initialized once with the credentials captured at first call. If the user updates their authorization code in Raycast preferences (without fully quitting the extension process), subsequent `sendEmail` calls will silently use the old credentials and fail with an auth error rather than picking up the new password. Since `imap-client.ts` creates a fresh `ImapFlow` per call and never caches, the SMTP side is inconsistent. Consider removing the singleton and calling `nodemailer.createTransport` inside `sendEmail` directly (or at least clearing `transporterInstance` when a send fails with auth error).
How can I resolve this? If you propose a fix, please make it concise.Reviews (1): Last reviewed commit: "Add qq-mail extension" | Re-trigger Greptile |
…nsporter caching - Add star/unstar action in EmailActions and ExpandedEmailView with optimistic update - Show star badge (yellow star icon) in email list item accessories - Fix attachment filter pagination: scan UIDs in batches until limit matched emails collected - Fix SMTP transporter singleton caching stale credentials: create fresh transporter per send - Fix CHANGELOG title and date placeholder per Raycast convention
|
This pull request has been automatically marked as stale because it did not have any recent activity. It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊 |
|
This PR is still actively maintained. I've been refining the implementation based on code review feedback — fixed attachment filter pagination, removed the SMTP transporter singleton to always pick up fresh credentials, and added star/unstar support with optimistic UI updates. Happy to address any further review comments! |
Description
A Raycast extension that brings QQ Mail (腾讯QQ邮箱) directly into your workflow. Read, compose, and manage your QQ Mail emails without leaving Raycast.
Features
Configuration
123456@qq.com)Screencast
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare located outside the metadata folder if they were not generated with our metadata tool