我對iOS電子郵件客戶端使用Mailcore庫。我想在有人查看時將電子郵件標記爲已查看(即設置郵件的IMAP SEEN flag)。如何通過Mailcore/Libetpan設置電子郵件IMAP SEEN標誌
這是Mailcore indicates消息已被read如何:
- (BOOL)isUnread {
struct mail_flags *flags = myMessage->msg_flags;
if (flags != NULL) {
BOOL flag_seen = (flags->fl_flags & MAIL_FLAG_SEEN);
return !flag_seen;
}
return NO;
}
這就是我所做的設置信息爲已讀:
- (void)setIsRead {
struct mail_flags *flags = myMessage->msg_flags;
flags->fl_flags = (flags->fl_flags | MAIL_FLAG_SEEN);
}
(我證實,它的作品至少在同一會話中。即,如果我在未讀消息上調用此消息,則請致電[self isUnread]
它返回false
)
我的問題是,這不會影響實際的IMAP服務器。也就是說,如果我在我的Gmail中查看同一封電子郵件,它仍會顯示爲未讀。
另外在CTCoreMessage documentation:
CTCoreMessage是你如何與信息工作。 實例化一個CTCoreMessage的最簡單方法是首先設置一個CTCoreAccount對象 ,然後得到一個CTCoreFolder對象,然後使用它的方便 方法messageWithUID:獲得一個可以使用的消息對象。
我做了這兩點(類的東西,可能是值得一提的是,我把我的IMAP連接活着的時候..但我把它idle當我沒有主動同步或發送電子郵件等。但在我撥打[self setIsRead]
之前,我發送了IMAP done command)。
那麼缺少什麼?我的想法是,我只是改變了我已經從IMAP服務器獲取的消息的本地結構......但我沒有用新信息更新服務器。我怎麼做?在Mailcore中,與服務器交互的唯一方法是通過+sendMessage:server:username:password:port:connectionType:useAuth:error: ,但這與發送電子郵件相同。這絕對不是我想要的。
想法?
更新: 基本上我只是希望能夠發出store IMAP command像這樣(我已經證實了它的工作原理上Telnet command line):
tag store %message_number% flags \Seen
* %message_number% FETCH (FLAGS (\Seen))
tag OK Success
我沒有..可能有多種方式來剝皮貓..反正我[解決](http://stackoverflow.com/a/16216282/766570)我的問題 – abbood 2013-04-25 14:13:39