go imap:错误的序列设定值""

时间:2014-07-22 08:07:23

标签: go imap

我正在尝试关注IMAP example,但我收到此错误imap: bad sequence set value "",该错误与示例中的行set, _ := imap.NewSeqSet("")相对应。它是lib中的bug还是文档中的拼写错误?

我正在尝试获取所有消息,因此将序列设置为通配符(*)似乎也不起作用。我也尝试阅读RFC但收效甚微。我能找到的关于序列值的全部是

seq-number      = nz-number / "*"
                    ; message sequence number (COPY, FETCH, STORE
                    ; commands) or unique identifier (UID COPY,
                    ; UID FETCH, UID STORE commands).
                    ; * represents the largest number in use.  In
                    ; the case of message sequence numbers, it is
                    ; the number of messages in a non-empty mailbox.
                    ; In the case of unique identifiers, it is the
                    ; unique identifier of the last message in the
                    ; mailbox or, if the mailbox is empty, the
                    ; mailbox's current UIDNEXT value.
                    ; The server should respond with a tagged BAD
                    ; response to a command that uses a message
                    ; sequence number greater than the number of
                    ; messages in the selected mailbox.  This
                    ; includes "*" if the selected mailbox is empty.

seq-range       = seq-number ":" seq-number
                    ; two seq-number values and all values between
                    ; these two regardless of order.
                    ; Example: 2:4 and 4:2 are equivalent and indicate
                    ; values 2, 3, and 4.
                    ; Example: a unique identifier sequence range of
                    ; 3291:* includes the UID of the last message in
                    ; the mailbox, even if that value is less than 3291.

sequence-set    = (seq-number / seq-range) *("," sequence-set)
                    ; set of seq-number values, regardless of order.
                    ; Servers MAY coalesce overlaps and/or execute the
                    ; sequence in any order.
                    ; Example: a message sequence number set of
                    ; 2,4:7,9,12:* for a mailbox with 15 messages is
                    ; equivalent to 2,4,5,6,7,9,12,13,14,15
                    ; Example: a message sequence number set of *:4,5:7
                    ; for a mailbox with 10 messages is equivalent to
                    ; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and
                    ; overlap coalesced to be 4,5,6,7,8,9,10.

status          = "STATUS" SP mailbox SP
                  "(" status-att *(SP status-att) ")"

2 个答案:

答案 0 :(得分:2)

这是您要复制的代码。

// Fetch the headers of the 10 most recent messages
set, _ := imap.NewSeqSet("")
if c.Mailbox.Messages >= 10 {
    set.AddRange(c.Mailbox.Messages-9, c.Mailbox.Messages)
} else {
    set.Add("1:*")
}
cmd, _ = c.Fetch(set, "RFC822.HEADER")

该代码将变量设置为""但从不使用该值。它使用另一个值,该值取决于c.Mailbox对象的状态。

这里的教训是,从文档中复制一行是不够的,你需要看看周围环境。

答案 1 :(得分:-1)

Go doc中似乎有一个拼写错误。 set, err := imap.NewSeqSet("1:*")解决了这个问题。