2016-02-27 77 views
-1
private int numberofallmessages = 0; 
     private int countMsg = 0; 
     private List<string> seenids = new List<string>(); 

     private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
     { 
       OpenPop.Pop3.Pop3Client PopClient = new OpenPop.Pop3.Pop3Client(); 
       PopClient.Connect("mail", 110, false); 
       PopClient.Authenticate("me", "mo", 
        OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword); 
       List<string> uids = PopClient.GetMessageUids(); 
       List<string> seenUids = new List<string>(); 
       int messageCount = 30; 
       numberofallmessages = messageCount; 
       allMessages = new List<OpenPop.Mime.Message>(messageCount); 
       for (int i = messageCount - 1; i > -1; i--) 
       { 
        if (backgroundWorker1.CancellationPending == true) 
        { 
         e.Cancel = true; 
         return; 
        } 
        string currentUidOnServer = uids[i]; 
        if (!seenUids.Contains(currentUidOnServer)) 
        { 
         allMessages.Add(PopClient.GetMessage(i)); 
         SaveFullMessage(PopClient.GetMessage(i), i); 
         w = new StreamWriter(emailsIDSFile, true); 
         w.WriteLine((i + 1) + " = " + currentUidOnServer); 
         w.Close(); 
         int nProgress = (messageCount - i + 1) * 100/messageCount; 
         backgroundWorker1.ReportProgress(nProgress, PopClient.GetMessageCount().ToString() + "/" + i); 
        } 
       } 
       PopClient.Disconnect(); 
     } 

唯一的例外是上線:如何修復超出索引異常?

allMessages.Add(PopClient.GetMessage(i)); 

當異常現在發生變量 'i' 是0 變量allMessages名單是29 和可變messageCount是30

的messageNumber參數的值不能爲零或更小。有效messageNumber範圍爲[1,messageCount]

+1

那麼異常消息看起來相當清楚 - 它看起來像'Pop3Client.GetMessage'採用基於1的值,而不是基於0的值。 (它也在文檔中 - http://hpop.sourceforge.net/documentation/OpenPop~OpenPop.Pop3.Pop3Client.GetMessage.html) –

回答

0

據介紹有效的消息從1開始,但你循環到0:

  for (int i = messageCount - 1; i > -1; i--) 

應該是:

  for (int i = messageCount; i > 0; i--) 
相關問題