invalid/unknown command - problem

0

Witam, podczas pisania klienta pocztowego napotkałem problem. Dotyczy on niektórych kont pocztowych tj. yahoo.com czy onet.pl. Podczas sprawdzenia ilości wiadomości w skrzynce (IdPOP31.CheckMessages) wyskakuje błąd "Invalid command" w yahoo.com lub "Unknown command" w onet.pl . Uniemożliwia to odbieranie wiadomości ze skrzynki przy użyciu pętli.

0

Jakie Delphi, jaka wersja Indy? Może tak trochę kodu czy szklaną kulę pora odkurzyć?

Przykład dla Indy 10 logowanie i pobrania nagłówków wiadomości z onet (yahoo nie sprawdzałem)

var
  i, NumMsgs: integer;
begin
  IdPOP31.Host:= 'pop3.poczta.onet.pl';  //w przykladzie dla onet np. dla gmail 'pop.gmail.com';
  IdPOP31.Port:= 110; //najczesciej 110 ale dla polaczen SSL np. dla gmail 995;
  IdPOP31.Username:= '[email protected]'; //adres emai;;
  IdPOP31.Password:= 'haslo'; //haslo
  //IdPOP31.UseTLS := utUseImplicitTLS; //potrzebne np. do gmail
  try
  if not IdPOP31.Connected then
    IdPOP31.Connect; //laczenie
  if IdPOP31.Connected then //czy polaczony
  begin
    NumMsgs:=IdPop31.CheckMessages; //ile maili
    Memo1.Lines.Add( 'Wszystkich Emaili:' +IntToStr(NumMsgs) ); //wpisz do memo dla przykladu
    for i:=1 to NumMsgs do begin
      IdPOP31.RetrieveHeader(i, IdMessage1); //odczytaj tylko naglowek (bez tresci)
      Memo1.Lines.Add( 'Numer: '+ IntToStr(i) + //wpisz do memo dla przykladu
                      ' Od: '+ IdMessage1.From.Text +
                      ' Temat: '+ IdMessage1.Subject);
      if (IdMessage1.Subject = 'cos tam') then //czy nazwa (temat) sie zgadza?
      begin
        //tu cos robisz
        break; //dalej nie szukamy
      end;
      IdMessage1.Clear;
    end;
    IdPOP31.Disconnect;
  end;
  except
    on e: Exception do
      ShowMessage(E.Message);
  end;
end;

EDIT// Tytuł wątku wszystko mówi wprost idealnie dobrany

0

Moj klient pocztowy posiada liste kont pocztowych zapisanych w combobox. Podczas wyboru elementu listy wczytywane sa odpowiednie wartosci do komponentu idpop3 i idsmtp czyli haslo, port etc. Jezeli polacze sie na poczatku z onet.pl to odczytuje normalnie ta poczte. Natomiast jezeli rozlacze sie z ta poczta i polacze np z wp to tez dziala poprawnie, jednak jak rozlacze z wp i polacze sie na onet to po poprawnym polaczeniu wyskakuje ten blad.

0

No skoro raz łączy poprawnie raz nie w zależności od tego czy uprzednio nie łączyłeś się z WP to coś musi być nie tak ale bez kodu trudno zgadywać co.

0

Kawałek kodu z ComboBox :

procedure TForm1.ListaChange(Sender: TObject);
...
if Lista.ItemIndex=8 then
begin
SPP.Text:= 'pop.mail.yahoo.com';
SPW.Text:= 'smtp.mail.yahoo.com';
PortP.Text:=IntToStr(995);
PortW.Text:=IntToStr(587);
SSL.Checked:=True;
CzySSL:=SSL.Checked;
SSLConnection(CzySSL); // procedura odpowiedzialna za załączenie TidSSLIOHandlerSockedOpenSSL do właściwości IOHandler w idPOP3 i IdSMTP
end;
if Lista.ItemIndex=9 then
begin
SPP.Text:= 'pop3.poczta.onet.pl';
SPW.Text:= 'smtp.poczta.onet.pl';
PortP.Text:=IntToStr(110);
PortW.Text:=IntToStr(587);
SSL.Checked:=False;
CzySSL:=SSL.Checked;
SSLConnection(CzySSL);
end;
...

Kawałek kodu przycisku Połącz:

procedure TForm1.PolaczClick(Sender: TObject);
...
IdSMTP1.Host:= SPW.Text;
IdPOP31.Host:= SPP.Text;
if Lista.ItemIndex=0 or 7 or 8 or 10 then
begin
SMTPssl.Host:=SPW.Text;
POP3ssl.Host:=SPP.Text;
end;
if Lista.ItemIndex=10 then
begin
Temp:=SSL.Checked;
SSLConnection(Temp);
end;
IdSMTP1.Username:= Adres.Text;
IdSMTP1.Password:= Haslo.Text;
IdPOP31.Username:= Adres.Text;
IdPOP31.Password:= Haslo.Text;
IdPOP31.Port:=StrToInt(PortP.Text);
IdSMTP1.Port:=StrToInt(PortW.Text);
try
IdPOP31.Connect;
IdSMTP1.Connect;
...

Przy buttonie Rozłącz
...
IdSMTP1.Disconnect;
IdPOP31.Disconnect;
...

sprawdzenie ilości wiadomości w skrzynce:
...
Label15.Caption:='Ilość wiadomości w skrzynce : ' + IntToStr(IdPOP31.CheckMessages);
...

Program posiada opcje zapisu do pliku konfiguracji poczty czyli username, password etc.
W FormCreate następuje przypisanie tych wartości z pliku jeżeli istnieje, w przeciwnym wypadku ustawia własciwości z listy nr1 z ComboBox'a.

Stworzyłem nową formę aby zrobić test dla konta w yahoo.com, po pomyślnym połączeniu protokołem POP3 kliknąłem na idpop31.checkmessages. W rezultacie "Invalid command". Host dla IOHanlderSSLSockedOpenSSL pop.mail.yahoo.com, port 995, SSLOptions.Method - sslvsslv3, w idpop3 autologin := Fals oraz UseTLS := utUseTLSimplicitTLS. Z takimi ustawieniami łączy bez problemu z pocztą (no i odpowiednie biblioteki wymagane).

Usunąłem z listy możliwość wyboru yahoo.com i inne powiązania w kodzie z nim związane. Rezultatem jest prawidłowo działający odczyt ilości wiadomości dla każdego elementu listy. Ale jak rozwiązać problem yahoo.com?

0

Kawałek kodu z ComboBox :

Jesteś na tyle tępy żeby nie czytać tekstu NA ZÓŁTO podczas tworzenia nowego tematu??? No cóż, to już coś pokazuje na początek. Nie umiesz czytać wskazówek.

Ale jak rozwiązać problem yahoo.com?

Zacznij może od poczytania wskazówek na ten temat np. w googlach bo już pokazałeś że tego nie robisz. I popraw kod, to może ktoś na niego spojrzy.

0
if Lista.ItemIndex=0 or 7 or 8 or 10 then

Fucking genius.
http://ideone.com/eaPAu
Tylko liczba 15 spełnia ten warunek, kompilator to nie człowiek i rozumie or jako (w tym wypadku) bitowe.
Chyba, że o takie zaciemnianie kodu chodziło...

0
Patryk27 napisał(a):
if Lista.ItemIndex=0 or 7 or 8 or 10 then

Tylko liczba 15 spełnia ten warunek, kompilator to nie człowiek i rozumie or jako (w tym wypadku) bitowe.
Chyba, że o takie zaciemnianie kodu chodziło...

Wygląda na to że pytaczowi wydaje się że 2+2*2 to 8.

0

Jestem swiezym programista w delphi i uzytkownikiem forum a problem samego yahoo.com nadal nie rozwiazany. Fakt ten kawalek kodu jest nieptrzebny... I bledny

1 użytkowników online, w tym zalogowanych: 0, gości: 1