 | ImapFolderGetStream(UniqueId, String, CancellationToken, ITransferProgress) Method |
Get a substream of the specified body part.
Namespace: MailKit.Net.ImapAssembly: MailKit (in MailKit.dll) Version: 4.12.1
Syntax
Exceptions
RemarksGets a substream of the specified message.
Examplepublic static void SaveAttachments (string baseDirectory)
{
using (var client = new ImapClient ()) {
client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
client.Authenticate ("username", "password");
client.Inbox.Open (FolderAccess.ReadOnly);
var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
var uids = client.Inbox.Search (query);
var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);
foreach (var item in items) {
var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());
Directory.CreateDirectory (directory);
foreach (var attachment in item.Attachments) {
string fileName = attachment.FileName;
if (string.IsNullOrEmpty (fileName)) {
if (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))
extension = ".dat";
fileName = Guid.NewGuid ().ToString () + extension;
}
ContentEncoding encoding;
if (string.IsNullOrEmpty (attachment.ContentTransferEncoding) || !MimeUtils.TryParse (attachment.ContentTransferEncoding, out encoding))
encoding = ContentEncoding.Default;
using (var stream = client.Inbox.GetStream (item.UniqueId, attachment.PartSpecifier + ".TEXT")) {
using (var content = new MimeContent (stream, encoding)) {
var path = Path.Combine (directory, fileName);
using (var output = File.Create (path))
content.DecodeTo (output);
}
}
}
}
client.Disconnect (true);
}
}
See Also