2015-08-03 1 views
2

У меня есть консольное приложение для загрузки документа из почты с помощью службы IMAP. Я использую сборку «S22.Imap» в приложении для IMAP. Я получил все письма, содержащие вложенные файлы в IEnumerable. Как загрузить эти файлы?Как загрузить приложение из gmail в C# с помощью IMAP?

using (ImapClient client = new ImapClient(hostname, 993, username, password, AuthMethod.Login, true)) 
     { 
      IEnumerable<uint> uids = client.Search(SearchCondition.Subject("Attachments")); 
      IEnumerable<MailMessage> messages = client.GetMessages(uids, 
       (Bodypart part) => 
       { 
        if (part.Disposition.Type == ContentDispositionType.Attachment) 
        { 
         if (part.Type == ContentType.Application && 
          part.Subtype == "VND.MS-EXCEL") 
         { 
          return true; 
         } 
         else 
         { 
          return false; 
         } 
        } 
        return true; 
       } 
      ); 
     } 

enter image description here

Я был бы признателен, если вы даете решение

+1

На скриншоте, расширение базы и вы должны получить [ContentStream] (https://msdn.microsoft.com/en-us/library/System.Net.Mail. Attachment% 28v = vs.110% 29.aspx) – Martheen

ответ

5

Тип прикрепленных файлов имеет свойство на нем, которое называется ContentStream, вы можете увидеть это в документации msdn: https://msdn.microsoft.com/en-us/library/system.net.mail.attachment(v=vs.110).aspx.

С помощью этого вы можете использовать что-то вроде этого, чтобы затем сохранить файл:

using (var fileStream = File.Create("C:\\Folder")) 
{ 
    part.ContentStream.Seek(0, SeekOrigin.Begin); 
    part.ContentStream.CopyTo(fileStream); 
} 

Edit: Таким образом, после GetMessages будет сделано, вы можете сделать:

foreach(var msg in messages) 
{ 
    foreach (var attachment in msg.Attachments) 
    { 
     using (var fileStream = File.Create("C:\\Folder")) 
     { 
      attachment.ContentStream.Seek(0, SeekOrigin.Begin); 
      attachment.ContentStream.CopyTo(fileStream); 
     } 
    } 
} 
1

Я думаю, что лучший источник будет документацией http://smiley22.github.io/S22.Imap/Documentation/

+0

Это действительно так. OP должен проверить примеры, например [этот] (http://smiley22.github.io/S22.Imap/Documentation/html/f76134df-07a8-4dd6-8a14-4ad00db062fb.htm) –

0
messages.Attachments.Download(); 
messages.Attachments.Save("location", fileSaveName) 

Таким образом, вы можно загрузить вложение по электронной почте, используя IMAP

0

Этот код будет хранить att загрузите файл внутри c диска в папку «Загрузить».

foreach (var msg in messages) 

         { 
          foreach (var attachment in msg.Attachments) 
          { 

           byte[] allBytes = new byte[attachment.ContentStream.Length]; 
           int bytesRead = attachment.ContentStream.Read(allBytes, 0, (int)attachment.ContentStream.Length); 

           string destinationFile = @"C:\Download\" + attachment.Name; 

           BinaryWriter writer = new BinaryWriter(new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)); 
           writer.Write(allBytes); 
           writer.Close(); 
          } 

       } 

Надежда помощь кому-то