【问题标题】:MailKit search query problemsMailKit 搜索查询问题
【发布时间】:2021-02-06 06:24:32
【问题描述】:

我使用 MailKit 和 IMAP 客户端。 GMail 邮件没有问题,但是当我向另一台服务器发出相同的请求时,就会出现问题。 即使是使用 MailKit.Search.SearchQuery.NotSeen 标准的简单搜索也不起作用。我可以访问邮箱并阅读邮件,但过滤器不起作用。 唯一有效的过滤器是 MailKit.Search.SearchQuery.All。此外,我无法使用 Inbox.AddFlags 将标志从 NotSeen 更改为 Seen,它仅适用于 GMail。 当我使用带有 MessageSummaryItems.BodyStructure 的 Fetch 方法时,它返回 TextBody = null。 它是否仅适用于 GMail 或我必须修复一些服务器设置?

IMAP.log:

Connected to imaps://mail.totalware.gr:993/
S: * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
C: A00000000 AUTHENTICATE PLAIN AGZvc3Rpcm9wb3Vsb3NAdG90YWx3YXJlLmdyAEAhZm9zdGlyb3BvdWxvc0Ah
S: A00000000 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY STATUS=SIZE NAMESPACE LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE QUOTA] Logged in
C: A00000001 NAMESPACE
S: * NAMESPACE (("INBOX." ".")) NIL NIL
S: A00000001 OK Namespace completed (0.001 + 0.000 secs).
C: A00000002 LIST "" "INBOX" RETURN (SUBSCRIBED CHILDREN)
S: * LIST (\HasChildren) "." INBOX
S: A00000002 OK List completed (0.017 + 0.000 + 0.016 secs).
C: A00000003 LIST (SPECIAL-USE) "" "*" RETURN (SUBSCRIBED CHILDREN)
S: * LIST (\HasNoChildren \Archive) "." INBOX.Archive
S: * LIST (\Subscribed \HasNoChildren \Junk) "." INBOX.spam
S: * LIST (\Subscribed \HasNoChildren \UnMarked \Trash) "." INBOX.Trash
S: * LIST (\Subscribed \HasNoChildren \UnMarked \Sent) "." INBOX.Sent
S: * LIST (\Subscribed \HasNoChildren \Drafts) "." INBOX.Drafts
S: A00000003 OK List completed (0.001 + 0.000 secs).
C: A00000004 SELECT INBOX (CONDSTORE)
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
S: * 21 EXISTS
S: * 0 RECENT
S: * OK [UIDVALIDITY 1513154986] UIDs valid
S: * OK [UIDNEXT 1634] Predicted next UID
S: * OK [HIGHESTMODSEQ 3293] Highest
S: A00000004 OK [READ-WRITE] Select completed (0.002 + 0.000 + 0.001 secs).
C: A00000005 UID SEARCH RETURN () UNSEEN
S: * ESEARCH (TAG "A00000005") UID
S: A00000005 OK Search completed (0.001 + 0.000 secs).
C: A00000006 LOGOUT
S: * BYE Logging out
S: A00000006 OK Logout completed (0.001 + 0.000 secs).

【问题讨论】:

  • 发送了哪些命令,服务器的响应是什么?你真的用对了邮箱吗?
  • 服务器运行的是什么软件?有些服务器的SEARCH 实现非常糟糕,尽管我希望它们至少支持UNSEEN
  • 我很惊讶 UNSEEN 不起作用。如果这是标题或正文的字符串匹配标准的问题,那我一点也不感到惊讶。 Inbox.AddFlags() 无法正常工作表明他正在使用只读邮箱(或使用 EXAMINE 而不是 SELECT)。
  • @Tasos 请粘贴 IMAP 协议日志,以便我们找出问题所在。要获取日志,您可以使用new ImapClient (new ProtocolLogger ("imap.log")) 使 ImapClient 将 IMAP 协议请求和响应保存到名为“imap.log”的文件中。
  • 原来有些IMAP服务器没有正确实现rfc4731。也就是说,他们不会将RETURN () 视为等同于RETURN (ALL)。 MailKit 2.11.1 将更加明确并使用RETURN (ALL) 来解决此问题。

标签: server imap mailkit


【解决方案1】:

根据日志,MailKit的Search(SearchQuery.Unseed)没有返回结果是因为你的IMAP服务器返回了0个匹配项。

事实证明,一些 IMAP 服务器没有正确实现 rfc4731。也就是说,他们不会将RETURN () 视为等同于RETURN (ALL)。 MailKit 2.11.1 将更加明确并使用RETURN (ALL) 来解决此问题。

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2012-12-24
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多