繁体   English   中英

如何搜索所有未读邮件IMAP CMD / go

[英]How to search ALL Unread messages IMAP CMD / go

我正在开发电子邮件客户端,由于某些原因,IMAP服务器不会将所有未读邮件发送回我。 在2915封电子邮件中,它仅发送回2888。我试图将它们连续地标记为已读/未读,并且似乎“已读”命令也可以将它们都标记为已读,未读,但是当我搜索未读邮件时,我得到了不要得到其中的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
    }

您正在做一些非常奇怪的事情,应该阅读Imap和lib的工作方式。

总结一下。

您必须根据要实现的目的来选择邮箱。 如果只想下载电子邮件,请选择只读。 如果要更新某些电子邮件(已看到,已删除),请选择可写。 在这里查看我的答案。

如果要下载UIDS列表,只需将UIDSearch与仅一个arg一起使用UIDSearch指定要获取的范围。 您可以使用UIDSearch("1:*")

如果要获取未读电子邮件的UID,请执行以下操作: UIDSearch("1:* NOT SEEN")

UIDSearch并不关心Attr因为它只会获取UIDS而不是正文。

如果需要主体,请使用UIDFetch并为其提供*imap.SeqSet其中包含要获取的differents属性。 示例: UIDFetch(set, "RFC822.HEADER", "UID")

总而言之,请阅读文档或使用sourceGraph浏览代码(真棒)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM