簡體   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