2017-10-17 18 views
0

이 같은 전체 IMessageSummaries의 목록을 얻을 수 MailKit을 사용하고 있습니다 :IMessageSummary에서 MimeMessage를 얻는 방법은 무엇입니까?

var allMessages = remoteFolder.Fetch(remoteIndexList, MessageSummaryItems.Full | MessageSummaryItems.Flags | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure); 

나는 IMessageSummary 등의 일부를 다운로드와 같은 어떤 최적화에 관심이 아니에요, 난 단지 전체 데이터를 빠른 속도로 원하는 나는 그것을 얻을 수 있습니다.

그러나 위의 방법을 사용하여, 나는 다음 IMessageSummaryBody 속성은 BodyPartBasic 때문에 HtmlPreviewVisitor를 사용하여 예를 들어, 제대로 메시지의 본문에 HTML을 읽을 수 없습니다. 나는 분명히 전체 MimeMessage을 필요로한다.

문제는 복수형 MimeMessages을 얻으려는 경우 ImapClient.GetMessage(int index, ...) 메서드를 사용하여 한 번에 하나씩 만 얻을 수 있다는 것입니다.

다시 각 전체 MimeMessage를 다운로드 할 필요없이 IMessageSummary을 만들고 HtmlPreviewVisitor 함께 사용하는 데 사용 된 원래의 MimeMessage에서 모든 부품을 추출하는 방법이 있나요?

답변

1

당신이해야 할 것은 :

foreach (var item in allMessages) { 
    var message = remoteFolder.GetMessage (item.UniqueId); 
} 

실제로 메시지를 포함하거나 메시지를 다운로드하지 않습니다 IMessageSummary, 그냥 같은 같은 메시지에 대한 메타 데이터의 다양한 비트 (대한 IMAP 서버 요청 메시지 구조, 읽음/읽지 않음, 보낸 사람, 제목, 날짜,받는 사람, 참조, 답장 등의 플래그).

당신은 IMAP 서버에서 개별 MIME 부분을 가져 오는에 관심이없는 경우에, 당신은 내가 아는 MessageSummaryItems 등 (MessageSummaryItems.All | MessageSummaryItems.UniqueId로 감소 된 세트를 사용 할 수 있습니다, AllFull 이상을 포함해야 것 같아,하지만 그건 아니다 IMAP 별칭이 작동하는 방식 ...).

사용하려는 데이터 조각에 따라 요청하는 MessageSummaryItems을 더 줄일 수도 있습니다.

예를 들어, IMessageSummaryItem.Envelope 속성을 사용하지 않으면 MessageSummaryItems.Envelope 플래그가 필요하지 않으며 요청하지 않으면 IMAP 서버에서 보내지 않을 것이므로 쿼리의 속도가 빨라집니다 정보.

+0

예, 각 IMessageSummary에 대해 GetMessage()를 사용해야하지만, GetMessages() 메소드는 Fetch()와 마찬가지로 IMAP 서버에 한 요청 만 사용하여 메시지 목록을 반환하지 않는 이유는 무엇입니까? – Nevca

+0

메모리에 덤프되는 많은 양의 데이터가 있기 때문입니다. – jstedfast

+0

감사합니다. @jstedfast – Nevca