S22.Imap将邮件附件保存到本地硬盘

时间:2013-05-09 10:40:30

标签: asp.net c#-4.0 imap

我需要将消息附件存储到本地硬盘驱动器中。是否有任何解决方法可以实现此目的?我正在使用S22.Imap dll

using (ImapClient Client = new ImapClient("imap.gmail.com", 993,
            "xxxxxx@xxxxx.com", "xxxxxxxxxx", S22.Imap.AuthMethod.Login, true))
            {
                uint[] uids = Client.Search(
                    SearchCondition.From("test.account.rac@gmail.com").And(
                    SearchCondition.SentSince(new DateTime(2013, 5, 8))).And(
                    SearchCondition.SentBefore(new DateTime(2013, 5, 9)))
                );

                MailMessage[] messages = Client.GetMessages(uids,
                    (Bodypart part) =>
                    {
                        // We're only interested in attachments
                        if (part.Disposition.Type == ContentDispositionType.Attachment)
                        {
                            Int64 TwoMegabytes = (1024 * 1024 * 2);
                            if (part.Size > TwoMegabytes)
                            {
                                // Don't download this attachment
                                return false;
                            }
                        }

                        // fetch MIME part and include it in the returned MailMessage instance
                        return true;
                    }
                );
                string attachment_name;
                if (messages[0].Attachments.Count > 0)
                {




                }
            }

没有用于将这些附件保存到本地驱动器的内置方法。此外,这可以通过S22.Mail.dll库实现,但我找不到这个库。有谁能提供我的解决方案? 以下是S22.Mail源代码https://github.com/smiley22/S22.Mail的链接。

1 个答案:

答案 0 :(得分:0)

我尝试在Pull #42中修复了库的某些问题(当写这篇文章时它尚未合并 - 你可能想要取代那个分支。)

然后迭代Message.Attachments而不是部分。 Net.Mail.Attachment.ContentStream会为您提供可以复制到文件的流。 要检查尺寸,请使用ContentStream.Length

如何保存流的内容已深入讨论:How do I save a stream to a file in C#?