Mailkit Fetch“IMAP响应中的意外标记:[qstring:”Multipart message“]”

问题描述 投票:0回答:1

我收到一条带有消息的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(你可以注意到没有Fetch Completed消息):

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(uids)时,Protocologger给了我一个有趣的信息:

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

使用其他库时,我已经遇到过这封邮件的问题。

据我所知,“Fetch”属于MailKit,“GetMessage”属于MimeKit。

那么,是否有任何解决方法来继续使用Fetch而不是使用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 "<[email protected]>") 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,但看起来最后2个值并不清楚它们应该来自何处。我的意思是内容语言或语言标签?内容处理或内容描述?

由于Exchange Server和Outlook,office365.com被广泛使用,对我来说听起来我必须继续使用GetMessage并忘记Fetch。

imap mailkit mimekit
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.