2015-11-02 50 views
0

我发现了一个ImapProtocolException一条消息:Mailkit取“意外令牌IMAP响应:QString的:‘多部分消息’]”

"Unexpected token in IMAP response: [qstring: "Multipart message"]" when issuing zInbox.Fetch(uids, MailKit.MessageSummaryItems.UniqueId Or MailKit.MessageSummaryItems.BodyStructure Or MailKit.MessageSummaryItems.Envelope) 

但在另一方面,如果我用的GetMessage (uids)一切顺利,没有错误。

这里是ProtocolLogger(你可以看到不获取完成消息):

C: A00000790 UID FETCH 97824 (UID ENVELOPE BODYSTRUCTURE) 
S: * 24320 FETCH (UID 97824 ENVELOPE ("Mon, 26 Oct 2015 16:48:44 +0000" "NFe" ((NIL NIL "fatsc" "makrocentral.com.br")) NIL NIL ((NIL NIL "fiscal" "generale.ind.br")) NIL NIL NIL "<[email protected]>") BODYSTRUCTURE (("text" "plain" ("charset" "ISO-8859-1") NIL "Message text" "Quoted-printable" 227 8 NIL ("inline" NIL) NIL NIL)("application" "octet-stream" ("name" "42151000460986000506550040000387401000387404-nfe.xml") NIL "Attached file: 42151000460986000506550040000387401000387404-nfe.xml" "Base64" 11086 NIL ("attachment" ("filename" "42151000460986000506550040000387401000387404-nfe.xml")) NIL NIL)("application" "pdf" ("name" "42151000460986000506550040000387401000387404-nfe.pdf") NIL "Attached file: 42151000460986000506550040000387401000387404-nfe.pdf" "Base64" 50364 NIL ("attachment" ("filename" "42151000460986000506550040000387401000387404-nfe.pdf")) NIL NIL) "mixed" ("boundary" "017AC96C_005ED075_Synapse_boundary") "Multipart message" NIL)) 

当使用的GetMessage信息(UID),Protocologger给我一个有趣的信息:

S: X-mailer: Synapse - Pascal TCP/IP library by Lukas Gebauer 

使用其他库时,我已经遇到了这个邮件程序的问题。

据我了解“取”属于MailKit“的GetMessage”属于MimeKit

那么,是否有任何解决方法继续而不是使用GetMessage? 循环〜1500邮件和下载每一个只是为了获取附件名称需要很长时间?

有没有人在这里有类似的邮件这样的问题“Synapse - Lukas Gebauer的Pascal TCP/IP库”

+0

jstedfast 有趣.... 在这两种情况下,使用另一个lib,现在使用MailKit,IMAP服务器是Exchange 2007和Exchange 2013(在Office 365中使用)。 这种情况只发生在使用Synapse的信息范围为300k的情况下。 是否有任何其他信息可以帮助我们进一步了解?如果消息仍然存在,我可以尝试。 会很好用Fetch,并绕过预期,尽快它连接迷路。因此,重新开始。 – jzero

回答

1

问题在于IMAP服务器响应了完全中断的响应。

按照IMAP规范,继"mixed"令牌多语法应该是:

body-ext-mpart = body-fld-param [SP body-fld-dsp [SP body-fld-lang 
       [SP body-fld-loc *(SP body-extension)]]] 
       ; MUST NOT be returned on non-extensible 
       ; "BODY" fetch 
body-fld-param = "(" string SP string *(SP string SP string) ")"/nil 
body-fld-dsp = "(" string SP body-fld-param ")"/nil 
body-fld-lang = nstring/"(" string *(SP string) ")" 
body-fld-loc = nstring 

,但我们得到的是:("boundary" "017AC96C_005ED075_Synapse_boundary") "Multipart message" NIL)

这基本上分解为以下类型的标记:

body-fld-param [SP] string [SP] nil 

请注意"Multipart message"不允许使用。什么应该在那里可以是一个NIL或类似的东西:("inline" ("name" "value"))

换句话说,你的IMAP服务器没有讲话语法正确IMAP。 MailKit无法理解你的IMAP服务器试图说什么。

注意:问题在于IMAP服务器,而不是本例中的Synapse Mailer。

+0

我很好奇MIME看起来像什么导致IMAP服务器如此糟糕。 – Max

+0

我会尝试获取更多信息 – jzero