procedure TMailServer.GetListStr();
var
   MailStrings: String;
   CdStrings:String;
   i:integer;
begin
   for i := 0 to ListStr.Count-1 do
        begin
                application.ProcessMessages;
                MailStrings := CutStr(ListStr.Strings[i],1);
                CdStrings := Cutstr(ListStr.Strings[i],0);
                if mailstrings = '[email protected]' then 
                    begin
                       SendMail(MailStrings,CdStrings);
                 end;
        end;
end;
上面是从邮箱中收取邮件,然后一条一条对比,如果发件人是[email protected],那么就回复一封邮件。
cutstr是把发件人和主题分割开。但是每次运行到这里就会提示:List index out of bounds(1)怎么回事呢?请大家帮我解决一下。

解决方案 »

  1.   

    这样换一下试试:for   i   :=  ListStr.Count-1  downto 0  do 
      

  2.   

    这种情况肯定是越界吗?是不是在对liststr使用时是否先要初始化?
    即运行时先将油箱中的邮件动态添加到liststr中;
      

  3.   


    已经添加到liststr中了。我试2楼的方法看看。
      

  4.   

    用List 等时
    最好用   i := ListStr.Count-1  downto 0  do 因为你删除1时,2就变成第一个了。 你再去删除第二个,第二个可能就已经不存在了。
      

  5.   


    同样的问题也会出现。如果把部分内容注释掉就不会出问题
    procedure   TMailServer.GetListStr(); 
    var 
          MailStrings:   String; 
          CdStrings:String; 
          i:integer; 
    begin 
          for   i   :=   0   to   ListStr.Count-1   do 
                    begin 
                                    application.ProcessMessages; 
                                    MailStrings   :=   CutStr(ListStr.Strings[i],1); 
                                    CdStrings   :=   Cutstr(ListStr.Strings[i],0); 
                                    //if   mailstrings   =   '[email protected] '   then   
                                    //        begin 
                                    //              SendMail(MailStrings,CdStrings); 
                                    //  end; 
                    end; 
    end; 
      

  6.   

    CutStr是一个什么样的函数?分析一下问题是不是出在这个函数的使用上。
      

  7.   

    因为不知道你listStr里存什么东西和CutStr函数,我权且变通了一下,没发现什么问题
    procedure TForm1.Button4Click(Sender: TObject);
    var
    MailStrings:String;
    i:integer;
    listStr:TStringlist;
    begin
    liststr:=TStringList.Create;
    liststr.Delimiter:=',';
    liststr.DelimitedText:='[email protected],[email protected],[email protected],[email protected]';
    for i:=0 to ListStr.Count-1 do
    begin
    application.ProcessMessages;
    MailStrings:=ListStr.Strings[i];
    if mailstrings='[email protected]' then
      begin
      showmessage(MailStrings);
      end;
    end;
    liststr.Free;
    end;感觉可能是你CutStr函数的问题
      

  8.   


    function CutStr(MailStr:string;k:integer):String;
    var
       ASource: PChar;
       ACount,i: Integer;
       AStrings: TStringList;
    begin
       ASource := PChar(MailStr);
       AStrings := TStringList.Create;
       try
         ACount := ExtractStrings(['|'], [' ','.','"'], ASource, AStrings);
         Result := AStrings.Strings[k];
       finally
         AStrings.Free;
       end;end;
      

  9.   

    liststr 中的内容大致是这样的'邮件主题1|[email protected]'
    '邮件主题2|[email protected]'
      

  10.   

        if ACount-1>=K then Result := AStrings.Strings[k] else Result := 'error';
      

  11.   

    把上面的加上去
    procedure TForm1.Button5Click(Sender: TObject);
    var
          MailStrings:String;
          CdStrings:String;
          i:integer;
          liststr:TStringlist;
    begin
    liststr:=TStringList.Create;
    liststr.Add('邮件主题1|[email protected]');
    liststr.Add('邮件主题2|[email protected]');
    for i:= 0 to ListStr.Count-1 do
      begin
      application.ProcessMessages;
      MailStrings:=CutStr(ListStr.Strings[i],1);
      CdStrings:=Cutstr(ListStr.Strings[i],0);
      if mailstrings='[email protected]' then
         begin
         showmessage(MailStrings+' '+CdStrings);
         //SendMail(MailStrings,CdStrings);
         end;
      end;
    liststr.free;
    end; 
    还是一点问题没有