我收到一个ImapProtocolException,并显示一条消息:
"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),一切都会很好,没有错误。
这是Fetch中的ProtocolLogger(您不会注意到FetchCompleted消息):
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 "<20151026164845.43268801F3AD@mail-smtp08-mia.tpn.terra.com>") 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(uids)时,Protocologger会给我一个有趣的信息:
S: X-mailer: Synapse - Pascal TCP/IP library by Lukas Gebauer
在使用另一个库时,我已经遇到了此邮件程序的问题。
据我所知,"Fetch"属于MailKit,GetMessage"则属于MimeKit 那么,是否有任何方法可以继续使用Fetch而不是使用GetMessage?循环浏览约1500封邮件并下载每封邮件,只为获取附件名称需要很长时间? 这里有人对像这样的邮件程序有类似的问题吗?"Synapse-Pascal TCP/IP library by Lukas Gebauer"
所以我想现在有了更多的信息和问题。自从开始这个线程以来,我处理的是BODYSTRUCTURE,并不是很清楚(至少对我来说)RFC 3501。我不得不再次谈论"Synapse",这是Log中的字符串,它给了我意外的令牌。
S: * 22300 FETCH (UID 32388 ENVELOPE ("Thu, 6 Sep 2018 13:19:10 -0300" "Zebra - XML sent" (("Zebra" NIL "invoice" "zebra.com")) NIL NIL ((NIL NIL "payments" "cat.com")) ((NIL NIL "invoice" "zebra.com") (NIL NIL "mary" "zebra.com")(NIL NIL "igor" "zebra.com")) NIL NIL "<20180906161753.3F4A774030A@proxy.tiger.com>") BODYSTRUCTURE (("text" "plain" ("charset" "UTF-8") NIL "Message text" "Quoted-printable" 209 6 NIL ("inline" NIL) NIL NIL)("text" "xml" ("name" "4441004299066.xml") NIL "4441004299066.xml" "Base64" 10642 137 NIL ("inline" ("filename" "4441004299066.xml")) NIL NIL)("application" "pdf" ("name" "4441004299066.pdf") NIL "4441004299066.pdf" "Base64" 48448 NIL ("inline" ("filename" "4441004299066.pdf")) NIL NIL) "mixed" ("boundary" "6624CFB2_17170C36_Synapse_boundary") "Multipart message" NIL))
正如评论中所指出的,问题出现在结尾部分"多部分消息"NIL,另一方面,运行良好的BodyStructure可以以"NIL-NIL"或**"NIL-pt-br"结尾。
那么,好吧,现在的问题是。BodyStructure字符串中的最后两个字段应该是什么?与此同时,我发现:1) "多部分消息"来自消息头的"内容描述"2) "pt-br"来自消息头的"内容语言"
我完全同意遵循RFC,但看起来最后两个值不清楚它们应该来自哪里。我是说内容语言还是语言标签?内容处置还是内容描述?
自从Exchange Server和outlook,office365.com被广泛使用以来,对我来说,听起来我不得不继续使用GetMessage,而忘记Fetch。
问题是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。