Здраствуйте. У меня такая проблема. Хочу сделать Чекер мыл через Pop3. Проверяю так: Code: for l:=0 to StringGrid1.RowCount-1 do begin Email1:=Pos('@',StringGrid1.Cells[0,l+1]); Username:=Copy(StringGrid1.Cells[0,l+1],1,Email1-1); pop:='pop.'+copy(StringGrid1.Cells[0,l+1],Email1+1,Length(StringGrid1.Cells[0,l+1])); idpop31.Username:=Username; idPop31.Password:=StringGrid1.Cells[1,l+1]; idpop31.Host:=pop; try IdPOP31.Connect; except if IdPOP31.Connected then StringGrid1.Cells[2,l+1]:='Валид' else StringGrid1.Cells[2,l+1]:='Невалид'; IdPOP31.Disconnect; end; end; Проблема в том что он не полностью рабочий. Уже неделю довести его до ума никак не могу. Если почты невалид то проверяет очень медленно где-то в 12 сек 1 пароль (пинг pop.mail.ru 221мсек) Но как попадается Валид программа ведет себя непредсказуемо .. Пишет "Валид" на невалидном акке и т.д. Иногда ошибки разные выскакивают...короче дурдом Помогите пожалуйста! Если будет проверят норм то прикручу многопоток...
попробуй ка вот так: Code: for l:=0 to StringGrid1.RowCount-1 do begin Email1 := Pos('@', StringGrid1.Cells[0, l + 1]); Username := Copy(StringGrid1.Cells[0, l + 1], 1, Email1 - 1); pop:='pop.'+copy(StringGrid1.Cells[0, l + 1], Email1 + 1, Length(StringGrid1.Cells[0, l + 1])); idpop31.Username := Username; idPop31.Password := StringGrid1.Cells[1,l+1]; idpop31.Host := pop; try try IdPOP31.Connect(5000); if IdPOP31.Connected then StringGrid1.Cells[2,l+1]:='Валид'; except StringGrid1.Cells[2,l+1]:='Невалид'; end; finally IdPOP31.Disconnect; end; end; end;
Code: if IdPOP31.Connected then Вот тут ошибка. Если скопилюю программу и запущу то проверяет пока есть Валид. Потом когда попадает на невалид выскакивает такая ошибка Если скопилюю и запущу с диска, то проверяет все, но когда доходит до невалида то проверяет ооочень медленно...
Когда не из-под IDE запускаю то долго чекает, но без ошибок. А когда в IDE то при первом же невалиде выскакивает ошибка (скрин выше)
выскакивает exception на ошибку. Отлавливай их с помощью try except end; В дельфи и будут выскакивать ексепшны, потому что они нужны для разработки. Либо отключай их, либо запускай не из дельфи
В дельфи оно и должно выскакивать, чтобы написать код обработки. Сделай так: try Здесь твой код except on E: Exception do begin Result:='Ne valid'; end; end;
1. а почему ты решил чекать мыла именно через рор3 ? 2. можно и через смтп если уж на то пошло но это все маразм. если мыла одного почтовика то лучше сделать через вебку. а если разных то всеравно рор3 всех провов ты не узнаеш )
>>если мыла одного почтовика то лучше сделать через вебку. на мэйле соединение идет через https. то есть обычными готовыми компонентами тут не обойдешься. если я не настолько конечно отстал от жизни )
ТС эхх как вы достали уже Очередной неуч лезет в сеть не зная основ Запомни: исключение != ошибка Исключения в первую очередь информируют разработчика о неполадках В данном случае тебе мягко намекают о том что акк может быть невалидный, и ты, как разраб, должен эту ситуацию обработать. Если не хочешь видеть окно ошибке когда запускаешь в дебаггере добавь EidProtocolReplyError в список игнора отладчика. Если хочешь обработать то юзай try except или событие OnException стандартного компонента TApplicationEvents (благо название класса исключения я тебе уже назвал) Насчет долгой проверки: Свойства Timeout у IdPOP3 как я посмотрел нету. Поэтому создаешь(кидаешь на форму) TTimer, а в обработчике OnTimer пишешь что-то вроде if IdPOP3.Connected then IdPOP3.Disconnect