我需要将消息附件存储到本地硬盘驱动器中。是否有任何解决方法可以实现此目的?我正在使用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的链接。
答案 0 :(得分:0)
我尝试在Pull #42中修复了库的某些问题(当写这篇文章时它尚未合并 - 你可能想要取代那个分支。)
然后迭代Message.Attachments
而不是部分。
Net.Mail.Attachment.ContentStream
会为您提供可以复制到文件的流。
要检查尺寸,请使用ContentStream.Length
。
如何保存流的内容已深入讨论:How do I save a stream to a file in C#?