Ĺadny brzuch
Cześć,
mam następujący problem nie wiem co robię źle dlatego proszę o podpowiedzi :)
Program pocztowy opiera się na Indy10 pobieram pocztę, pobierane są same nagłówki :blink:
var I: Integer; itm: TListItem; begin IdPOP.Host := Edit2.text; IdPOP.Username := Edit3.Text; IdPOP.Password := Edit1.Text; IdPOP.Connect; if IdPOP.Connected then begin Caption := 'Połączony'; StatusBar1.Panels[0].Text := 'Nowych wiadomości > ' + IntToStr(IdPOP.CheckMessages); if IdPOP.CheckMessages > 0 then if MessageDlg('Czy pobrać wiadomości ?', mtInformation, [mbYes, mbNo], 0) = mrYes then begin // pobranie ilosci maili przypisanie do progress bara ProgressBar1.Max := IdPOP.CheckMessages; Progressbar1.Position := 0; for I := 1 to IdPOP.CheckMessages do begin Application.ProcessMessages; IdPOP.RetrieveHeader(I, IdMessage1); MBoxSize := IdPOP.RetrieveMsgSize(I); // dodawanie pozycji do listy itm := ListView1.Items.Add; itm.Caption := IntToStr(I); itm.SubItems.Add(''); itm.SubItems.Add(IdMessage1.Subject); itm.SubItems.Add(IdMessage1.From.Text); itm.SubItems.Add(DateToStr(IdMessage1.Date)); itm.SubItems.Add(FloatToStr(IdPOP.RetrieveMsgSize(I) div 1024) + ' KB'); ProgressBar1.Position := I; StatusBar1.Panels[0].Text := 'Nowych wiadomości: ' + IntToStr(IdPOP.CheckMessages) + ' | Pobranych: ' + IntToStr(I); end; end; end;
Mam teraz pytanie jak automatycznie pobierać i załącznik (całego maila). Gdy z ListView wybieram pozycję dopiero wtedy pobierana jest treść i załączniki :( Jak to poprawić ? Gdy przeglądam następnego posta i znów powrócę do poprzedniego to kolejny raz pobiera pocztę i załączniki.
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var intIndex: Integer; li: TListItem; begin if Selected then begin // czyszczenie komponentow RichEdit1.Clear; ListView2.Clear; IdPOP.Retrieve(ListView1.Selected.Index + 1, IdMessage1); RichEdit1.Lines.Add(IdMessage1.Body.Text); // sprawdzenie czy zalacznik istenieje for intIndex := 0 to Pred(IdMessage1.MessageParts.Count) do begin if (IdMessage1.MessageParts.Items[intIndex] is TIdAttachmentFile) then begin li := ListView2.Items.Add; li.Caption := TIdAttachmentFile(IdMessage1.MessageParts.Items[intIndex]).FileName; end; end; end; end;
Czym to "ominąć". Proszę o podpowiedzi lub kawałki kodu ;)
Dzięki :)
Użytkownik Mitring edytował ten post 18 lipiec 2007, 13:44
IdPOP.RetrieveHeader(I, IdMessage1); A dla czego miałoby to pobrać całą wiadomość? Przecież wyraźnie jest napisane "pobierz nagłówek".
IdPOP.Retrieve(ListView1.Selected.Index + 1, IdMessage1); Nie przechowujesz nigdzie pobranej poczty, tylko za każdym razem pobierasz od nowa.
Nie wiem czy się mylę, ale mam jakoś tak dziwnie wrażenie, że nawet nie przejrzałeś tego kodu, a już na pewno nie rozumiesz co się w nim dzieje.
Pomyśl, przeanalizuj kod, pomyśl, zapytaj google/help'a/etc, pomyśl, napisz na forum.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
mam następujący problem nie wiem co robię źle dlatego proszę o podpowiedzi :)
Program pocztowy opiera się na Indy10 pobieram pocztę, pobierane są same nagłówki :blink:
var I: Integer; itm: TListItem; begin IdPOP.Host := Edit2.text; IdPOP.Username := Edit3.Text; IdPOP.Password := Edit1.Text; IdPOP.Connect; if IdPOP.Connected then begin Caption := 'Połączony'; StatusBar1.Panels[0].Text := 'Nowych wiadomości > ' + IntToStr(IdPOP.CheckMessages); if IdPOP.CheckMessages > 0 then if MessageDlg('Czy pobrać wiadomości ?', mtInformation, [mbYes, mbNo], 0) = mrYes then begin // pobranie ilosci maili przypisanie do progress bara ProgressBar1.Max := IdPOP.CheckMessages; Progressbar1.Position := 0; for I := 1 to IdPOP.CheckMessages do begin Application.ProcessMessages; IdPOP.RetrieveHeader(I, IdMessage1); MBoxSize := IdPOP.RetrieveMsgSize(I); // dodawanie pozycji do listy itm := ListView1.Items.Add; itm.Caption := IntToStr(I); itm.SubItems.Add(''); itm.SubItems.Add(IdMessage1.Subject); itm.SubItems.Add(IdMessage1.From.Text); itm.SubItems.Add(DateToStr(IdMessage1.Date)); itm.SubItems.Add(FloatToStr(IdPOP.RetrieveMsgSize(I) div 1024) + ' KB'); ProgressBar1.Position := I; StatusBar1.Panels[0].Text := 'Nowych wiadomości: ' + IntToStr(IdPOP.CheckMessages) + ' | Pobranych: ' + IntToStr(I); end; end; end;
Mam teraz pytanie jak automatycznie pobierać i załącznik (całego maila). Gdy z ListView wybieram pozycję dopiero wtedy pobierana jest treść i załączniki :( Jak to poprawić ? Gdy przeglądam następnego posta i znów powrócę do poprzedniego to kolejny raz pobiera pocztę i załączniki.
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var intIndex: Integer; li: TListItem; begin if Selected then begin // czyszczenie komponentow RichEdit1.Clear; ListView2.Clear; IdPOP.Retrieve(ListView1.Selected.Index + 1, IdMessage1); RichEdit1.Lines.Add(IdMessage1.Body.Text); // sprawdzenie czy zalacznik istenieje for intIndex := 0 to Pred(IdMessage1.MessageParts.Count) do begin if (IdMessage1.MessageParts.Items[intIndex] is TIdAttachmentFile) then begin li := ListView2.Items.Add; li.Caption := TIdAttachmentFile(IdMessage1.MessageParts.Items[intIndex]).FileName; end; end; end; end;
Czym to "ominąć". Proszę o podpowiedzi lub kawałki kodu ;)
Dzięki :)
Użytkownik Mitring edytował ten post 18 lipiec 2007, 13:44
IdPOP.RetrieveHeader(I, IdMessage1); A dla czego miałoby to pobrać całą wiadomość? Przecież wyraźnie jest napisane "pobierz nagłówek".
IdPOP.Retrieve(ListView1.Selected.Index + 1, IdMessage1); Nie przechowujesz nigdzie pobranej poczty, tylko za każdym razem pobierasz od nowa.
Nie wiem czy się mylę, ale mam jakoś tak dziwnie wrażenie, że nawet nie przejrzałeś tego kodu, a już na pewno nie rozumiesz co się w nim dzieje.
Pomyśl, przeanalizuj kod, pomyśl, zapytaj google/help'a/etc, pomyśl, napisz na forum.