class Net::IMAP::ESearchResult
一个“扩展搜索”响应 (ESEARCH
)。 ESearchResult
应该由 IMAP#search
, IMAP#uid_search
, IMAP#sort
, 和 IMAP#uid_sort
返回(而不是 SearchResult
),在以下任何一种情况下:
-
为
IMAP#search
或IMAP#uid_search
指定了返回选项。服务器必须支持允许 RFC4466return
选项的搜索扩展,例如ESEARCH
、PARTIAL
或IMAP4rev2
。 -
为
IMAP#sort
或IMAP#uid_sort
指定了返回选项。服务器必须支持ESORT
扩展 [RFC5267]。注意:
IMAP#search
和IMAP#uid_search
尚不支持ESORT
。 -
服务器支持
IMAP4rev2
但不支持IMAP4rev1
,或者已启用IMAP4rev2
。IMAP4rev2
需要ESEARCH
结果。
请注意,某些服务器可能会声称支持需要 ESEARCH
结果的搜索扩展(例如 PARTIAL
),但当指定 return
选项时,仍然只返回 SEARCH
结果。
一些搜索扩展可能会导致服务器在初始化命令完成后发送 ESearchResult
响应。使用 IMAP#add_response_handler
来处理这些响应。
属性
导致返回此响应的命令的标记字符串。
当为 nil
时,此响应不是由特定命令引起的。
指示此响应中的 data
是指 UID (当为 true
时) 还是消息序列号 (当为 false
时)。
指示此响应中的 data
是指 UID (当为 true
时) 还是消息序列号 (当为 false
时)。
公共类方法
# File net-imap-0.5.4/lib/net/imap/esearch_result.rb, line 29 def initialize(tag: nil, uid: nil, data: nil) tag => String | nil; tag = -tag if tag uid => true | false | nil; uid = !!uid data => Array | nil; data ||= []; data.freeze super end
公共实例方法
包含满足搜索条件的所有消息序列号或 UID 的 SequenceSet
。
当关联的搜索命令没有结果,或者当未指定 ALL
返回选项但指定了其他返回选项时,返回 nil
。
需要 ESEARCH
[RFC4731] 或 IMAP4rev2
[RFC9051]。
另请参阅: to_a
# File net-imap-0.5.4/lib/net/imap/esearch_result.rb, line 110 def all; data.assoc("ALL")&.last end
包含满足搜索条件的消息序列号或 UID 子集的 PartialResult
。
需要 PARTIAL
[RFC9394] 或 CONTEXT=SEARCH
/CONTEXT=SORT
[RFC5267]
另请参阅: to_a
# File net-imap-0.5.4/lib/net/imap/esearch_result.rb, line 176 def partial; data.assoc("PARTIAL")&.last end
当 all
或 partial
包含消息序列号或 UID 的 SequenceSet
时,to_a
将该集合作为整数数组返回。
当 all
和 partial
都为 nil
时,要么是因为服务器未返回任何结果,要么是因为 IMAP#search
的 RETURN
选项中未包含 ALL
和 PARTIAL
,to_a
返回一个空数组。
请注意,SearchResult
也实现了 to_a
,因此可以在不检查服务器返回的是 SEARCH
还是 ESEARCH
数据的情况下使用它。
# File net-imap-0.5.4/lib/net/imap/esearch_result.rb, line 47 def to_a; all&.numbers || partial&.to_a || [] end