2016-04-27 8 views
0

をダウンロードすることなく、添付ファイルの情報を取得する私は、被写体の情報を取得するために、次のコードを使用しています。Mimekit、IMapClientはメッセージ全体

電子メールに添付ファイルが含まれているかどうかを知ることができます。メッセージ全体をダウンロードせずにスプレッドシート(​​xls/xlsx)

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); 
} 

答えて

3

はい、可能です。ただし、これを行うにはFetch()メソッドにMessageSummaryItems.BodyStructureフラグを渡す必要があります。

これにより、summary.Bodyプロパティが設定されます。

var hasAttachments = summary.BodyParts.Any (x => x.IsAttachment); 
Bodyプロパティが移入された場合、それらのいずれかがこのような添付ファイルがある場合

は、あなたがチェックし、メッセージ内の身体の部分の平坦化された階層を反復処理の迅速&汚い方法としてBodyPartsプロパティを使用することができますXLS/XLSX添付ファイルをチェックする

一つの方法は、次のようになります。

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

これらはしかし、非常に単純なチェックで、最も可能性の高いもののあなたの解釈があるかであります添付ファイルがIsAttachmentプロパティに示されているものと衝突することはないので、Visitorパターンを使用してMIME階層をトラバースするか、再帰を使用して独自のロジックを使用してパーツが添付ファイルであるかどうかを判断することをお勧めします独自のカスタム定義(電子メールの場合、誰もが「添付ファイル」を構成するものの独自の解釈を持っているようです)。

私は次の場所に共通MIME階層上のドキュメントを持っている:

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

...そしておそらく他の場所を。

関連する問題