2016-04-27 6 views
0

Ich verwende den folgenden Code, um Betreffinformationen zu erhalten.Mimekit, IMapClient Informationen zum Anhängen abrufen, ohne die gesamte Nachricht herunterzuladen

Ist es möglich zu wissen, ob die E-Mail Anhänge enthält, und vielleicht Excel-Tabellen (xls/xlsx), ohne die gesamte Nachricht herunterzuladen?

client.Connect("imap.gmail.com", 993); 
client.Authenticate("spyperson", "secret-word"); 
var inbox = client.Inbox; 
inbox.Open(FolderAccess.ReadOnly); 

Console.WriteLine("Total messages: {0}", inbox.Count); 
Console.WriteLine("Recent messages: {0}", inbox.Recent); 

var uids = inbox.Search(SearchQuery.NotSeen); 
foreach (var summary in inbox.Fetch(uids, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | MessageSummaryItems.Flags)) 
{ 
    Console.WriteLine("[summary] {0:D2}: {1}:{2}", summary.Index, summary.Envelope.Subject, summary.Flags); 
} 

Antwort

3

Ja, das ist möglich. Dazu müssen Sie jedoch das Flag MessageSummaryItems.BodyStructure an die Methode Fetch() übergeben.

Dies wird die summary.Body Eigenschaft auffüllen.

Wenn die Body Eigenschaft aufgefüllt wird, können Sie die BodyParts Eigenschaft als schnelle & schmutzige Art und Weise der Iteration über eine abgeflachte Hierarchie von Körperteilen in der Nachricht verwenden, zu überprüfen, ob einer von ihnen sind Anhänge wie folgt aus:

var hasAttachments = summary.BodyParts.Any (x => x.IsAttachment); 

Eine Möglichkeit für xls/xlsx-Anhänge zu überprüfen, könnte die folgende sein:

var hasAttachments = summary.BodyParts.Any (x => x.IsAttachment && 
    x.FileName != null && (x.FileName.EndsWith (".xls") || 
    x.FileName.EndsWith (".xslsx"))); 

Diese sind sehr simpel Kontrollen, aber, und höchstwahrscheinlich Ihre Interpretation dessen, was ist oder Nicht ein Anhang steht in Konflikt mit dem, was die IsAttachment -Eigenschaft Ihnen sagt, daher würde ich wahrscheinlich empfehlen, entweder das Besuchermuster zum Durchlaufen der MIME-Hierarchie zu verwenden oder Rekursion zu verwenden und anhand Ihrer eigenen Logik festzustellen, ob ein Teil ein Anhang ist eigene benutzerdefinierte Definition (jeder scheint seine eigene einzigartige Interpretation dessen zu haben, was einen "Anhang" darstellt, wenn es um E-Mails geht).

Ich habe Dokumente über gemeinsame MIME-Hierarchien in den folgenden Orten:

  1. http://www.mimekit.net/docs/html/WorkingWithMessages.htm#MessageStructure
  2. http://www.mimekit.net/docs/html/FrequentlyAskedQuestions.htm#MessageBody

... und wahrscheinlich auch an anderen Orten.