我做一个邮件收发程序,收邮件时会报Uneven size in DecodeToStream ,不是所有的邮件都报这样的错误,我用不同的邮箱测试有的可以正常接收。部分代码如下:
      if IdMessage1.Date>StrToDateTime(sE_Date) then
      begin
        IdMessage1.Clear;
        IdPOP31.Retrieve(intIndex,IdMessage1); //此处代码执行报错
        suiStatusBar1.Panels[0].Text:='正在接收邮件:“'+POP+'”中第'+inttostr(k)+'封';
        itm := ListView2.Items.Add;
        itm.Caption:=IntToStr(k);
        itm.ImageIndex:=0;
        itm.SubItems.Add(GetTitle(IdMessage1.Subject));
        itm.SubItems.Add(GetTitle(IdMessage1.From.Text));
        itm.SubItems.Add(DateTimeToStr(IdMessage1.Date));
        itm.SubItems.Add(IntToStr(IdPOP31.RetrieveMsgSize(intIndex)));
        itm.SubItems.Add(IdMessage1.MsgId);
        inc(sID);
        mixfilename:='';请大家帮我看看该怎么解决。

解决方案 »

  1.   

    自己顶,看能不能顶个高手出来。
    另:不能接收的是163的邮箱,我把163邮件转发到sina的邮箱就能够接收。郁闷中
      

  2.   

    我靠!一个路过的都没有。传说中的高手在哪?难道这个问题就没有办法解决?用outlook接收163邮箱一点问题都没有。那位兄台指点迷津,
      

  3.   

    获取邮件头信息,应该用
    IdPOP31.Retrieve.RetrieveHeader(intIndex,IdMessage1); 我不是高手,我是这么做的。
      

  4.   

    IdPOP31.Retrieve.RetrieveHeader(intIndex,IdMessage1);  正确
      

  5.   

    邮件头获取是我是IdPOP31.RetrieveHeader(intIndex,IdMessage1); 
    执行完全正常,我没有帖上。
    就是在取邮件正文和附件出错的,部分邮件
    IdPOP31.Retrieve(intIndex,IdMessage1); //此处代码执行部分邮件会报错
    我现在就差解决这个问题了。要不然周末都没得好过了,那位救救我
      

  6.   

    你的 intIndex 值对不对啊?
    还有,你说163是指 163.com 还是 163.net 
    我的代码和你的差不多,163.com 没问题啊
      

  7.   

    for intIndex := 1 to IdPOP31.CheckMessages do
        begin
          try
            IdPOP31.RetrieveHeader(intIndex,IdMessage1);
          Except
          //.....
          end
          //....
        end;
    这个intIndex 不应该有错吧,我测试用的是mail.163.com的邮箱。里面有几封邮件收取
    会出错Uneven size in DecodeToStream,原因不知道。
      

  8.   

    我把程序简化到如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i : integer;
    begin
      IdPop31.Host := 'pop3.163.com';
      IdPop31.Username := '*';
      Idpop31.Password := '*';
      IdPop31.Connect();  for i := 1 to Idpop31.CheckMessages do
      begin
        IdMessage1.Clear;
        try
          IdPOP31.RetrieveHeader(i,IdMessage1);
          showmessage(IdMessage1.Subject+'@@@@@@@@@@'+IdMessage1.MsgId);
        Except
          IdPOP31.DisconnectSocket ;
          IdPOP31.Disconnect ;
          IDPOP31.Connect();
          Continue;
        end;
        try
          IdPop31.Retrieve(i,IdMessage1);//在此处还是有部分邮件报错Uneven size in DecodeToStream
          showmessage(IdMessage1.Subject+'@@@@@@@@@@'+IdMessage1.MsgId);
        except
          exit;
        end;
      end;
        showmessage('邮件收取结束,哈哈')
    end;
    真不知道咋办了,可是那个属性设置不对?我可是啥都没有动,全部是默认设置。去邮件头正常
      

  9.   

    在不行就只有换控件了,我测试了Tmail2000可以下载。不过这个控件属性和原来的相差比较大,整个程序都要改动。为了一点错误换控件难过啊。顺便问问:可有用过Tmail2000的,里面邮件的大小怎么活动,知道的麻烦告诉一声。要周末了,剩下的时间不过了。