我收到 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)一切顺利,没有错误。
以下是提取中的 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 "<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 。
那么,有没有办法解决获取而不是使用 GetMessage ? 循环播放~1500封邮件并下载每封邮件只是为了获取附件名称需要很长时间?
这里的任何人都有类似邮件的问题,就像这个“Synapse - Lukas Gebauer的Pascal TCP / IP库”?
所以我认为现在有更多的信息和问题。自从开始这个线程以来,我正在处理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))
正如评论中所指出的,问题是在“Multipart message”NIL 的最后部分,另一方面,工作正常的BodyStructure可以以“NIL NIL”或**“NIL pt结束-Br”。
所以,好吧,现在的问题是。 BodyStructure字符串中的最后两个字段应该是什么? 同时我发现了这个: 1)“多部分消息”来自消息头的“内容描述” 2)“pt-br”来自消息头的“Content-Language”
我完全同意遵循RFC,但看起来最后2个值并不清楚它们应该来自何处。 我的意思是内容语言或语言标签?内容处理或内容描述?
由于Exchange Server和Outlook,office365.com被广泛使用,对我而言,我必须继续使用GetMessage并忘记Fetch。
答案 0 :(得分: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。