【问题标题】:How to search ALL Unread messages IMAP CMD / go如何搜索所有未读邮件 IMAP CMD / go
【发布时间】:2015-05-06 04:24:03
【问题描述】:

我正在开发一个电子邮件客户端,由于某些原因,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
    }

【问题讨论】:

  • 你能掌握连接上发送和接收的实际数据吗?

标签: go imap


【解决方案1】:

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

总结一下。

您必须根据您想要实现的目标来选择您的邮箱。如果您只想下载电子邮件,请将其选为只读。如果您想更新一些电子邮件(已查看、已删除),请将其选为可写。看我的回答here

如果您想下载 UIDS 列表,只需使用 UIDSearch 并仅使用一个参数指定您想要获取的范围。你可以使用UIDSearch("1:*")

如果要获取未读邮件的 UID:UIDSearch("1:* NOT SEEN")

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

如果你想要身体,使用UIDFetch 并给它一个*imap.SeqSet 与你想要获得的不同属性。示例:UIDFetch(set, "RFC822.HEADER", "UID")

总结一下,阅读documentation或者用sourceGraph浏览代码(真棒)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2013-04-14
    • 2014-09-14
    • 2011-12-17
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多