2017-04-18 1 views
0

Gmail 메시지를 파일 하나 하나에 파일로 내보내려고합니다. 이것에 가장 적합한 전략은 무엇입니까?Mailkit은 많은 양의 메시지를 보내고 삭제합니다.

for (int i = 0; i < inbox.Count; i++) 
    { 
     var message = inbox.GetMessage(i); 
     // export message 
     inbox.AddFlags (i, MessageFlags.Deleted); 
    } 

루프 내부에서 메시지를 삭제해도 순서 색인이 손상되지는 않을지 우려됩니다. gmail은 읽기가 느리고 읽기 루프가 실패하면 모든 과정을 다시 시작해야하기 때문에 읽기와 삭제를 위해 2 개의 별도 루프를 사용할 수 없습니다.

답변

2

표준 IMAP 서버의 경우 메시지에 \Deleted 플래그를 설정해도 폴더에서 메시지가 제거되지는 않으며 향후 메시지가 제거 될 메시지를 결정할 때 사용하는 플래그를 설정하기 만하면됩니다.

즉, Gmail과 같은 서버는 기본적으로 비표준 동작을 사용하므로 사용자의 우려가 유효합니다.

이러한 유형의 문제를 피하려면 대신 uids를 사용하는 것이 좋습니다. 인덱스 기반 API를 사용하지 않는 것이 좋습니다.

var uids = folder.Search (SearchQuery.All); 
foreach (var uid in uids) { 
    var message = folder.GetMessage (uid); 
    folder.AddFlags (uid, MessageFlags.Deleted); 
} 
+0

감사합니다. 이미 청크 가져 오기를 구현했습니다. 여전히 당신의 솔루션은 우아 해 보입니다. –

관련 문제