组件 :idpop3,idmessagefor j:=0 to IdMessage1.MessageParts.Count-1 do                        //查看邮件所有内容,保证能够下载所有附件
  try
   if (IdMessage1.MessageParts.Items[j] is TIdAttachment) then        //匹配邮件条目是否是附件
     begin
        TIdAttachment(IdMessage1.MessageParts.Items[j]).SaveToFile('c:/'+
        TIdAttachment(IdMessage1.MessageParts.Items[j]).FileName);    //以原有文件名保存附件在指定目录
     end;
  except
    continue;
  end;这是论坛里的一段代码。我按此测试时,编译没有问题,但就是读不到附件。随后我用showmessage读IdMessage1.MessageParts.Count的信息,发现为0,attachment也是0,是什么原因?邮箱明明有附件的,文件名为英文。
请大家帮忙看看。
谢谢。
分本来就不多,请大家见谅。

解决方案 »

  1.   

    网上有挺多关于接收邮件的例子,可以多看看。
    附件有多大?正常的邮件内容能接受到吗?
    之前写过接收邮件的,for循环用的是idpop1.checkmessages获取邮件数量。
    idpop1.retrieve(i+1,idmessage1);
    if imessage1.messageparts.item[1] is tidattachment then
      

  2.   

    楼上,你说的跟我写的是一样的代码,附件是一个小文本文件。昨天没测试收正文,现在通过memo读取中文,却读不到正文。
    tmp:=idmessage1.Body.Text;
     memo1.Lines.Add(tmp);
      

  3.   

     按这个代码
            if   Msg.MessageParts.Items[]   is   TIdText   then 
                    begin 
                        Memo1.Clear; 
                        Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[]).Body); 
                    end 
    可以读取到正文。
    是不是跟delphi版本什么的有关。我的2010
      

  4.   

    这是indy10的pop例子,供参考   POP.Retrieve(lvHeaders.Selected.Index + 1, Msg);   for intIndex := 0 to Pred(Msg.MessageParts.Count) do
          begin
             if (Msg.MessageParts.Items[intIndex] is TIdAttachmentFile) then
                begin //general attachment
                   pnlAttachments.visible := true;
                   li := lvMessageParts.Items.Add;
                   li.ImageIndex := 8;
                   li.Caption := TIdAttachmentFile(Msg.MessageParts.Items[intIndex]).Filename;
                   li.SubItems.Add(TIdAttachmentFile(Msg.MessageParts.Items[intIndex]).ContentType);
                end
             else
                begin //body text
                   if Msg.MessageParts.Items[intIndex] is TIdText then
                      begin
                         Memo1.Lines.Clear;
                         Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
                      end
                end;
          end;
      

  5.   

    这是取附件的代码,用原文件名。
       if idmessage1.MessageParts.Items[] is tidattachmentfile  then
         begin
          tidattachmentfile(idmessage1.MessageParts.Items[]).savetofile('c:\'
          +tidattachmentfile(idmessage1.MessageParts.Items[]).filename);     end;