3

MailFolder.Fetch を使用して IMAP 経由でメッセージをダウンロードしてから、MailFolder.GetBodyPart で関連する本文部分を取得しています。

処理された情報に加えて、MIME メッセージの生の表現を取得することは可能ですか?

コード:

var query = CreateSearchQuery(startDate, endDate);
await mailFolder.OpenAsync(FolderAccess.ReadOnly);
var results = await mailFolder.SearchAsync(SearchOptions.All, query);
var messageSummaries = await mailFolder.FetchAsync(results.UniqueIds, DownloadFlags);

後で、この質問に示されているように、パーツを実行し、html とプレーンパーツを見つけてダウンロードすることで、メッセージをダウンロードします(そうでないパーツのみをダウンロードしますIsAttachment==true)。

4

2 に答える 2

3

個々の MIME 部分だけをダウンロードした場合、(すべての部分をダウンロードしてメッセージを再構築しない限り)メッセージ全体の生の表現を取得することはできませんが、各 MIME 部分の生の表現を取得することはできます。から取得WriteTo()したそれぞれに存在するメソッドを使用してダウンロードします。MimeEntityMailFolder.GetBodyPart()

完全なメッセージの生の表現が必要な場合、それを取得する最も簡単な方法は、取得したメソッドを使用MailFolder.GetMessage()して呼び出すことです。または、次の方法で使用できます。WriteTo()MimeMessageMailFolder.GetStream()

var raw = folder.GetStream (uid, string.Empty);

未加工のメッセージ全体が必要であることがわかっている場合は、最初に個々の部分をダウンロードしないことをお勧めします。帯域幅の無駄になるからです。を使用することにした場合GetStream()は、ストリームをフィードしMimeMessage.Load()て、解析されたMimeMessageオブジェクトを取得できます。

注:WriteTo()メソッドを使用する場合、未加工のメッセージまたはボディ パーツ データを読み取る場合は、ストリーム内で 0 にシークすることを忘れないでください。

于 2015-10-15T13:25:57.490 に答える