2017-05-31 1 views
1

J'ai une application de console C# que j'utilise pour rechercher dans un compte Gmail des e-mails avec des pièces jointes et les télécharger. J'utilise MailKit.Net.Imap.ImapClient pour ce faire.MailKit.Net.Imap lire les pièces jointes Gmail lorsque "Content-Disposition; inline" est défini

Si l'e-mail a été envoyé avec l'option "Content-Disposition; attachment", tout fonctionne correctement. Si l'e-mail a été envoyé avec l'ensemble "Content-Disposition; inline", ImapClient ne voit pas les pièces jointes et je ne peux pas les télécharger.

Ci-dessous le code que j'utilise pour le faire. Est-ce que quelqu'un a une idée de comment résoudre ce problème?

 static public void mail_ReadEmail() 
 
     { 
 
      string mail_login = "your login here"; 
 
      string mail_password = "your password here"; 
 
      string mail_folderName = "your gmail folder name here"; 
 

 
      // Get client & open folder 
 
      ImapClient client = mail_GetImapClient(mail_login, mail_password); 
 
      IMailFolder folder = mail_GetIMailFolder(client, mail_folderName); 
 

 
      // Get emails 
 
      DateTime startTime = DateTime.Now.AddMonths(-6); 
 
      IList<UniqueId> email = folder.Search(SearchQuery 
 
       .DeliveredAfter(startTime) 
 
       .And(SearchQuery 
 
       .FromContains("canon.co.nz"))); 
 

 
      // Loop through emails (oldest first) 
 
      for (int i = email.Count - 1; i >= 0; i--) 
 
      { 
 
       // Get message and display subject and date 
 
       MimeMessage message = folder.GetMessage(email[i]); 
 
       Console.WriteLine(message.Subject + " - " + message.Date.DateTime.ToShortDateString()); 
 

 
       // Show all attachments for this message 
 
       foreach (MimePart part in message.Attachments) 
 
        Console.WriteLine("\t* " + part.FileName); 
 
      } 
 
     }

Répondre

0

Vous pouvez utiliser la propriété BodyParts au lieu de la propriété Attachments.

Par exemple, vous pouvez le faire:

foreach (MimePart part in message.BodyParts.OfType<MimePart>().Where (x => x.IsAttachment || (/* other criteria that suggests an attachment */)) 
    Console.WriteLine("\t* " + part.FileName); 

Si vous voulez traiter tous les MimeParts avec un attribut de nom de fichier Content-Disposition ou un attribut name Content-Type jeu, vous pouvez alors faire:

!string.IsNullOrEmpty (x.FileName)