【问题标题】:MailKit Fetch Syntax error in untagged FETCH response. Unexpected token: '\\n'未标记的 FETCH 响应中的 MailKit Fetch 语法错误。意外标记:'\\n'
【发布时间】:2017-11-06 15:31:23
【问题描述】:

我看到了一些关于此的问题,但似乎没有一个与我遇到的问题相匹配,因此创建了这个问题。

我有一个邮箱(这是我看到此问题的第一个也是唯一一个),针对 Domino 服务器运行。当它试图获取该帐户的收件箱时,它会显示

foreach (var summary in client.Inbox.Fetch(0, -1, Items).Where(x => 
    (x.Flags & MessageFlags.Deleted) != MessageFlags.Deleted &&
    (x.Flags & MessageFlags.Seen) != MessageFlags.Seen))
    {
        //Do something...
    }

我的 imap 协议日志中的最后一个条目是:

S:  FLAGS (\Seen))      
S: * 8303 FETCH (UID 8303 ENVELOPE ({..MASKED..}) BODY[HEADER.FIELDS (REFERENCES)] {4}      
S: 
S: 
S:  FLAGS (\Seen))

此日志中没有 FETCH COMPLETE,有时日志似乎比其他日志更大(获取的电子邮件更多)。异常总是相同的,意外的令牌\n。

关于原子令牌异常的更新:

{"Syntax error in ENVELOPE. Unexpected token: [atom: <user@domain.orguser]"}


S:  FLAGS (\Seen))
S: * 19607 FETCH (UID 19607 ENVELOPE ("Wed, 8 Nov 2014 13:50:09 +0100" "Re: LDAP Filter" (("DisplayName1" NIL "dn1" "domain2.invalid")) (("DisplayName1" NIL "dn1" "domain2.invalid")) (("DisplayName1" NIL "dn1" "domain2.invalid")) (("DisplayName4" NIL "dn4" "domain1.invalid")("DisplayName3" NIL "dn3" "domain3.invalid")) (("DisplayName2" NIL "dn2" "domain2.invalid")("user@domain.org" NIL "user" "domain.org> "ss@domain.org" <user@domain.orguser")) NIL "<OF4C7FF16B.1B0A6826-ONC1257D6B.003FBF81-C1257D6B.00400501@LocalDomain>" "<OF31482F53.2CA9A4AC-ONC1257D6B.004080EE-C1257D6B.00410453@LocalDomain>") BODY[HEADER.FIELDS (REFERENCES SUBJECT)] {235}
S: Subject: Re: LDAP Filter
S: References: <3A5893A9FA8E964D862DAA1FA2B5E9EA1BCD89@OESTMB701.domain1.invalid>
S:  <3A5893A9FA8E964D862DAA1FA2B5E9EA1C1A45@OESTMB701.domain1.invalid>
S:  <OF4C7FF16B.1B0A6826-ONC1257D6B.003FBF81-C1257D6B.00400501@LocalDomain>

【问题讨论】:

    标签: c# mailkit


    【解决方案1】:

    这是说遇到了意外的换行符。问题是可能标头解析器没有消耗空标头 blob 的所有 4 个字节(它可能只是消耗了第一个空行)。

    解决方法可能是请求一个确实存在的标头以及 REFERENCES 标头(可能是 SUBJECT)。

    var headers = new HashSet<string> ();
    headers.Add ("REFERENCES");
    headers.Add ("SUBJECT");
    
    var items = folder.Fetch (0, -1, summaryItemFlags, headers);
    

    【讨论】:

    • Fetch() 中我的“项目”如下:codeprivate const MessageSummaryItems Items = MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.References;code 在该枚举中看不到 SUBJECT 标头选项,可能是因为它是信封的一部分?
    • 作为我之前评论的后续,我可以确认,如果我删除 REFERENCES 项,则不会遇到相同的异常,因此我认为我们可以得出结论,问题仍然存在于不正确的引用标头。等待您对解决方法的回应。另外,我遇​​到了另一个例外,关于信封中的 Atom 令牌:ENVELOPE 中的语法错误 意外令牌:[atom: {"masked"}]
    • 我将需要查看协议日志以查看此掩码令牌在哪里
    • “被屏蔽”的令牌是一个电子邮件地址,因此被屏蔽了 :) 但是您能否举例说明如何解决您发布的问题?
    • 如果你能在 IMAP 规范中找到合适的地方,我会吃掉我的脚并修复 MailKit。怎么样? :)
    猜你喜欢
    • 2023-02-22
    • 2021-09-03
    • 2015-05-28
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多