#Mail Some new Spam message disappear; moved to Inbox?
Describe the bug In Runbox 7, on opening the Spam folder, some new messages appear, then almost immediately disappear, leaving behind the existing spam messages. The "new Spam messages" that are no longer in the Spam folder do not appear in Inbox folder, but if I use another mail client, they do appear in Inbox!
To Reproduce Using Firefox 143.0 on LinuxMint 22.2 with the phoenix configuration.
Expected behavior Spam messages that are no longer deemed Spam and moved to Inbox appear!
@mlavi Thanks for your bug report.
Is there any spam filtering running in your email client that might be moving messages from Spam to Inbox or vice versa?
some morning claude code randomness -- the issue does not mention if user had opened inbox first
1. Initial Spam Folder Load (fetchFolderMessages)
- Client calls: listAllMessages(..., folder='Spam')
- API request: GET /mail/download_xapian_index?...&folder=Spam&sinceid=0
- Server returns messages (including folder field for each message)
- Client does NOT filter by folder! (line 422 only filters deletedFlag)
- Client assigns ALL returned messages to Spam folder list (line 430)
2. Messages Appear in Spam
- If server returns messages with folder='Inbox', client still displays them in Spam
- This happens because there's no client-side validation that msg.folder === 'Spam'
3. Messages Disappear
- applyChanges() runs (triggered by background sync or other updates)
- Lines 277-279 filter each folder list:
this.folderMessageLists[fld] = this.folderMessageLists[fld].filter((msg) =>
msg.folder === fld);
- Messages where msg.folder='Inbox' are removed from Spam list ✓
4. Messages Don't Appear in Inbox
- Same issue I identified before: Inbox cache might not exist or isn't populated
Immediate fix - Add client-side validation:
src/app/rmmapi/messagelist.service.ts:422
.pipe(
map((messages) => messages.filter(m => {
if (m.deletedFlag) return false;
// ALSO filter to only messages that actually belong to this folder
return m.folder === folder;
})),