diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp index 2b5f29f750..6ae12fb741 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include "IMAPMailbox.h" @@ -463,6 +463,11 @@ IMAPStorage::_ReadFilesThread() status_t IMAPStorage::_WriteFlags(int32 flags, BNode& node) { + if ((flags & kSeen) != 0) + write_read_attr(node, B_READ); + else + write_read_attr(node, B_UNREAD); + ssize_t writen = node.WriteAttr("MAIL:server_flags", B_INT32_TYPE, 0, &flags, sizeof(int32)); if (writen != sizeof(int32)) diff --git a/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp b/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp index 3c0aba613f..c4940b48fc 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp @@ -185,6 +185,10 @@ POP3Protocol::SyncMessages() entry_ref ref; entry.GetRef(&ref); + // the ref becomes invalid after renaming the file thus we already + // write the status here + MarkMessageAsRead(ref, B_UNREAD); + int32 size = MessageSize(toRetrieve); if (fFetchBodyLimit < 0 || size <= fFetchBodyLimit) { error = mailIO.Seek(0, SEEK_END); diff --git a/src/kits/mail/HaikuMailFormatFilter.cpp b/src/kits/mail/HaikuMailFormatFilter.cpp index 88efba3d45..99418e7850 100644 --- a/src/kits/mail/HaikuMailFormatFilter.cpp +++ b/src/kits/mail/HaikuMailFormatFilter.cpp @@ -64,8 +64,6 @@ HaikuMailFormatFilter::HaikuMailFormatFilter(MailProtocol& protocol, void HaikuMailFormatFilter::HeaderFetched(const entry_ref& ref, BFile* file) { - write_read_attr(*file, B_UNREAD); - file->Seek(0, SEEK_SET); BMessage attributes;