[英]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.