使用Mailkit丢失附件

时间:2016-01-13 09:55:08

标签: c# mailkit mimekit

当我使用MailKit通过IMAP协议收到来自Exchange的邮件时,它缺少附件。 当我这样做时:

string.Format("Mail has {0} attachments", mime.Attachments.Count())

报告“0”,即使邮件本身包含附件(如果我在Outlook客户端中打开它,我会看到附件)​​,当我激活IMAP协议日志记录时,显然它包含附件:< / p>

S: X-MS-Has-Attach: yes
...
S: Content-Type: message/rfc822
S: Content-Disposition: attachment;
S:  creation-date="Thu, 07 Jan 2016 09:16:53 GMT";
S:  modification-date="Thu, 07 Jan 2016 09:16:53 GMT"
...
S: X-MS-Has-Attach:
...

有趣的是附件部分中的“S:X-MS-Has-Attach:”标题,位于服务器的同一个包中。

这是一个已知问题,我该如何修复它以便在这些情况下我不会错过附件?它似乎只发生在一些邮件上并随机发生。

使用: MailKit 1.0.14.0 MimeKit 1.0.13.0

我发现有新的更新,但如果无法解决问题,我不会真正更新。

1 个答案:

答案 0 :(得分:5)

在您使用的MimeKit版本中,MimeMessage.AttachmentsIEnumerable<MimePart>,但消息/ rfc822部分由MessagePart表示,而MimePart不是MimeEntity的子类,它是子类MimePart(它是MimeMessage.Attachments的基类)。

在较新版本中,IEnumerable<MimeEntity>代替BodyParts,因此会包含您的消息/ rfc822附件。

您可以使用Attachments属性而不是private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); Console.WriteLine((Keys)vkCode); } return CallNextHookEx(_hookID, nCode, wParam, lParam); } 属性在您的MimeKit版本中解决此问题。