0

我收到带有消息的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 "<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)时,Prototoogger 给了我一个有趣的信息:

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。我再次谈论“突触”,这是来自 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)“M​​ultipart message”来自消息头的“Content-Description” 2)“pt-br”来自消息头的“Content-Language”

我完全同意遵循 RFC,但看起来最后 2 个值不清楚它们应该来自哪里。我的意思是内容语言还是语言标签?内容处置或内容描述?

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

4

1 回答 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。

于 2015-11-02T19:19:56.160 回答