还有,删除邮件的时候,只有使用一个叫 MailNumber 的整型参数指定,但是,这个参数对于邮箱中的邮件,并不是一成不变的,怎样才能防止错误删除

解决方案 »

  1.   

    try
          IdPOP3.Connect();
        Except
          IdPOP3.DisconnectSocket ;
          IdPOP3.Disconnect ;
          Application.MessageBox('登录远程服务器时出现错误','连接错误',MB_ICONEXCLAMATION) ;
        end ;
        try
          EmailTotalNum := IdPOP3.CheckMessages  ;
          Edit1.Text:= '共有'+ inttostr(EmailTotalNum) + ' 封邮件' ;
          if EmailTotalNum > 0 then
           begin
             for TmpNum := 1 to EmailTotalNum do
              begin
                IdMessage1.Clear ;
                try
                  IdPOP3.Retrieve(TmpNum,IdMessage1) ;
                Except
                  IdPOP3.DisconnectSocket ;
                  IdPOP3.Disconnect ;
                  Application.MessageBox('收取邮件时发生错误!','错误',MB_ICONERROR) ;
                  Break   ;
                end ;
                Edit2.Text:=IdMessage1.Subject;
                Idmessage1.IsEncoded :=False;
                For J:=0 to IdMessage1.Body.Count-1 do
                    ShowMessage(IdMessage1.Body[J]);            if IdMessage1.MessageParts.Count > 0 then
                begin
                  MessageCount := IdMessage1.MessageParts.Count ;
                  for I := 0 to MessageCount-1 do
                   begin
                     if IdMessage1.MessageParts.Items[I]  is TIdAttachment then
                      begin
                        if FileExists(  'c:\' + TIdAttachment(IdMessage1.MessageParts.Items[I]).FileName) then
                          DeleteFile('c:\' + TIdAttachment(IdMessage1.MessageParts.Items[I]).FileName) ;
                          try
                            TIdAttachment(IdMessage1.MessageParts.Items[I]).SaveToFile('c:\' + TIdAttachment(IdMessage1.MessageParts.Items[I]).FileName) ;
                          Except
                            Application.MessageBox('文件保存失败!','保存失败',MB_ICONERROR) ;
                            IdPOP3.DisconnectSocket ;
                            IdPOP3.Disconnect ;
                            Break ;
                          end ;
                      end ;
                   end ;
                end ;
                //删除已收到本地的邮件
                try
                  IdPOP3.Delete(TmpNum) ;
                Except
                  Continue ;
                end ;
              end ;
           end ;    Finally
          IdPOP3.DisconnectSocket ;
          IdPOP3.Disconnect ;
        end ;
      end ;