【发布时间】:2013-04-18 23:53:11
【问题描述】:
我正在为 iOS 电子邮件客户端使用 Mailcore 库。我想在有人查看电子邮件时将其标记为已查看(即为邮件设置IMAP SEEN flag)。
这就是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
【问题讨论】:
标签: ios objective-c imap email-client mailcore