Помогите с pop3 (делфи)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by moodoone, 13 Jul 2010.

  1. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Здраствуйте. У меня такая проблема. Хочу сделать Чекер мыл через 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;
    Проблема в том что он не полностью рабочий. Уже неделю довести его до ума никак не могу. :confused: Если почты невалид то проверяет очень медленно где-то в 12 сек 1 пароль (пинг pop.mail.ru 221мсек) Но как попадается Валид программа ведет себя непредсказуемо .. Пишет "Валид" на невалидном акке и т.д. Иногда ошибки разные выскакивают...короче дурдом :rolleyes: Помогите пожалуйста! Если будет проверят норм то прикручу многопоток...
     
  2. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    попробуй ка вот так:
    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;
    
     
    #2 dos999, 14 Jul 2010
    Last edited: 14 Jul 2010
  3. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    dos999, спасибо! Если валид то проверяет быстро. Но как попадается невалид- ошибка(
     
  4. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    use except
     
  5. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Где именно юзать except?
     
  6. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    moodoone, напиши какие ошибки. На каком участке кода они происходят(брейкпоинты поставь)?
     
  7. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Code:
    if IdPOP31.Connected then
    Вот тут ошибка. Если скопилюю программу и запущу то проверяет пока есть Валид. Потом когда попадает на невалид выскакивает такая ошибка [​IMG]
    Если скопилюю и запущу с диска, то проверяет все, но когда доходит до невалида то проверяет ооочень медленно...
     
  8. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Ставь таймаут на коннект
     
  9. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Стоит таймаут 5000
     
  10. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    И когда не из-под IDE запускаешь, долго чекает?
     
  11. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Когда не из-под IDE запускаю то долго чекает, но без ошибок. А когда в IDE то при первом же невалиде выскакивает ошибка (скрин выше)
     
  12. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Помогите пожалуйста!
     
  13. Скотти

    Скотти Member

    Joined:
    17 Sep 2009
    Messages:
    23
    Likes Received:
    8
    Reputations:
    0
    выскакивает exception на ошибку. Отлавливай их с помощью
    try
    except
    end;
    В дельфи и будут выскакивать ексепшны, потому что они нужны для разработки. Либо отключай их, либо запускай не из дельфи
     
  14. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Всеравно не помагает..
     
  15. Скотти

    Скотти Member

    Joined:
    17 Sep 2009
    Messages:
    23
    Likes Received:
    8
    Reputations:
    0
    В дельфи оно и должно выскакивать, чтобы написать код обработки.
    Сделай так:
    try
    Здесь твой код
    except
    on E: Exception do
    begin
    Result:='Ne valid';
    end;
    end;
     
  16. narik_

    narik_ Member

    Joined:
    5 Jun 2009
    Messages:
    0
    Likes Received:
    30
    Reputations:
    0
    1. а почему ты решил чекать мыла именно через рор3 ?
    2. можно и через смтп если уж на то пошло но это все маразм. если мыла одного почтовика то лучше сделать через вебку. а если разных то всеравно рор3 всех провов ты не узнаеш )
     
  17. Romik001

    Romik001 Member

    Joined:
    18 Jul 2009
    Messages:
    43
    Likes Received:
    8
    Reputations:
    10
    >>если мыла одного почтовика то лучше сделать через вебку.

    на мэйле соединение идет через https. то есть обычными готовыми компонентами тут не обойдешься. если я не настолько конечно отстал от жизни )
     
  18. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    Ну по идее там должны быть только mail.ru(bk.ru;list.ru;inbox.ru). Как тогда проверку сделать?
     
  19. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    ТС эхх как вы достали уже
    Очередной неуч лезет в сеть не зная основ
    Запомни: исключение != ошибка
    Исключения в первую очередь информируют разработчика о неполадках
    В данном случае тебе мягко намекают о том что акк может быть невалидный, и ты, как разраб, должен эту ситуацию обработать.
    Если не хочешь видеть окно ошибке когда запускаешь в дебаггере добавь EidProtocolReplyError в список игнора отладчика.
    Если хочешь обработать то юзай try except или событие OnException стандартного компонента TApplicationEvents (благо название класса исключения я тебе уже назвал)

    Насчет долгой проверки:
    Свойства Timeout у IdPOP3 как я посмотрел нету.
    Поэтому создаешь(кидаешь на форму) TTimer, а в обработчике OnTimer пишешь что-то вроде
    if IdPOP3.Connected then
    IdPOP3.Disconnect
     
    #19 GhostOnline, 18 Jul 2010
    Last edited: 18 Jul 2010
  20. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    Отстал , можно подключить OpenSSl библиотеки и все нормально будет .

    P.S На мейле обычный http