2014-07-24 43 views
1

我正在開發電子郵件客戶端,由於某些原因,IMAP服務器不會將所有未讀消息發回給我。在2915封電子郵件中,它只發回2888封。我試圖將它們標記爲連續讀取/未讀,看起來「讀取」命令起作用,並將它們標記爲全部讀取,未讀取的作品,但是當我搜索未讀消息時,不要拿27個。如何搜索所有未讀消息IMAP CMD/go

任何提示爲什麼發生這種情況?我懷疑有一個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 
    } 
+0

你能得到的實際數據的保持瀏覽代碼發送和連接上接收? – legoscia

回答

0

你正在做一些很奇怪的事情,你應該閱讀如何IMAP和的lib工作。

總結。

你必須根據你想要達到的目標選擇你的郵箱。如果您只想下載電子郵件,請將其選爲只讀。如果你想更新一些電子郵件(看到,刪除)選擇它可寫。看到我的回答here

如果要下載UIDS列表,只需使用UIDSearch,並且只有一個參數指定您想要獲得的範圍。您可以使用UIDSearch("1:*")

如果你想獲得的未讀郵件的的UID:UIDSearch("1:* NOT SEEN")

UIDSearch不關心Attr,因爲它只會變得UID和不機體的。

如果您想要正文,請使用UIDFetch併爲其指定一個*imap.SeqSet並指定要獲取的不同屬性。例如:UIDFetch(set, "RFC822.HEADER", "UID")

綜上所述,閱讀documentationsourceGraph(真正真棒)