我正在开发一个电子邮件客户端,由于某些原因,IMAP服务器不会将所有未读邮件发回给我。在2915封电子邮件中,它只发回了2888封。我试着连续地将它们标记为已读/未读,似乎" read“命令有效,并将它们标记为已读和未读,但当我搜索未读邮件时,我得到的却不是其中的27条。
有任何关于为什么会发生这种情况的提示吗?我怀疑是IMAP故障。
一些代码
const (
//serch
SearchUnseen = "UNSEEN"
SearchSeen = "SEEN"
SearchALL = "ALL"
)
const (
FlagSeen = `\Seen`
FlagUnseen = `\Unseen`
)
const (
//flag types
FlagSet = "+FLAGS"
FlagRemove = "-FLAGS"
)
type Request struct {
Label string //label: INBOX, Sent
Attr string //attr: RFC822.HEADER , []BODY if is Fetch
//OR "ALL", "UNSEEN" if is SEARCH
//http://tools.ietf.org/html/rfc3501#section-6.4.4
SqID string //sequences 1:44 , 1:*, 1,2,3 (UID)
}
cmd, err = c.UIDSearch(set, r.Attr)
cmd, err := imap.Wait(c.UIDStore(set, flagAction, imap.NewFlagSet(flag)))
if err != nil {
log.Error(err)
return
}
发布于 2014-07-24 20:46:51
你正在做一些非常奇怪的事情,你应该看看Imap和lib是如何工作的。
要而论之。
你必须根据你想要实现的目标来选择你的邮箱。如果只想下载电子邮件,请将其选择为只读。如果您想要更新某些电子邮件(已查看、已删除),请将其选为可写。请参阅我的答案here。
如果您想要下载UIDS列表,只需使用UIDSearch
,其中只有一个参数指定了您想要获取的范围。您可以使用UIDSearch("1:*")
如果你想获取未读邮件的UID:UIDSearch("1:* NOT SEEN")
UIDSearch并不关心Attr
,因为它只会获取UIDS,而不会获取主体。
如果您想要主体,请使用UIDFetch
并为其提供一个*imap.SeqSet
,其中包含您想要获取的不同属性。示例:UIDFetch(set, "RFC822.HEADER", "UID")
总之,使用sourceGraph阅读documentation或浏览代码(真的很棒)
https://stackoverflow.com/questions/24937218
复制