Data, godzina, rozmiar emaila

0

Witam!
Odbieram sobie maile z serwera biorąc nagłówki do listboxa, odczytując je w Webbrowserze, a nadawcę podaję w Edicie. Używam komponentów idpop3 i idmessage. I teraz pytanie: Jak mogę w Editach przedstawić jeszcze datę, godzinę przysłania emaila oraz jego rozmiar?
Dziękuję za odpowiedź i pozdrufki :) [browar]

0

TIdMessage.Date

0

TIdMessage.Date
Nie ma takiego czegoś...bo bym już tak dawno zrobił :)

0

Cześć

Tu masz pobranie informacji z nagłówka wiadomości:

 ileWiad:= IdPOP3.CheckMessages; //ile wiadomości w skrzynce
 rozmiar:= IdPOP3.RetrieveMailBoxSize div 1024; //rozmiar wszystkich wiadomości
 if ileWiad > 0 then
 begin
   ListView1.Clear;
   for x:= 1 to ileWiad do
   begin
     IdPOP3.RetrieveHeader(x, IdMessage);
     lista:= ListView1.Items.Add;
     lista.Caption:= IdMessage.Subject;                        //temat
     lista.SubItems.Add(IdMessage.From.Text);                  // nadawca
     lista.SubItems.Add(DateToStr(IdMessage.Date)+'r.');       //data nadania
     lista.SubItems.Add(IntToStr(IdPOP3.RetrieveMsgSize(x)));  // rozmiar
   end;
 end;

A tu po odebraniu wiadomości możesz uzyskać dalsze informacje,

 //zmienna "poz" = która wiadomość do pobrania
 IdPOP3.Retrieve(poz + 1, IdMessage); //pobranie wiadomości
 //dodatkowe informacje o wiadomości wyświetlane w labelach
 LabelFrom.Caption:= IdMessage.From.Text;
 LabelRecipients.Caption:= IdMessage.Recipients.EmailAddresses;
 LabelCc.Caption:= IdMessage.CCList.EMailAddresses;
 LabelSubject.Caption:= IdMessage.Subject;
 LabelDate.Caption:= FormatDateTime(?dd mmm yyyy hh:mm:ss?,IdMessage.Date);
 LabelReceipt.Caption:= IdMessage.ReceiptRecipient.Text;
 LabelOrganization.Caption:= IdMessage.Organization;
 LabelPriority.Caption:= IntToStr(Ord(IdMessage.Priority) + 1);

A mój nierozwiązany problem to:
<url> http://4programmers.net/Forum/viewtopic.php?id=58502 </url>
Może ktoś się pokusi by odpowiedzieć ?

0

No i o to mi chodziło, dzięki Inter [browar] Jeszcze tylko załacznik musze się nauczyć ściągać z serwera :)

0

Co do załączników :)
W części kodu tam gdzie pobierasz konkretną wiadomość umieść:

 //pobiera informacje załącznikach ...
 ListView2.Clear;
 for IleZalacz:= 0 to Pred(IdMessage.MessageParts.Count) do
 begin
   if (IdMessage.MessageParts.Items[IleZalacz] is TIdAttachment) then
   begin
     lista:= ListView2.Items.Add;              
     lista.Caption:= TIdAttachment(IdMessage.MessageParts.Items[IleZalacz]).Filename;
   end;
 end;

W Indy jako tako samych załączników nie ściągniesz albowiem to kod listu już zwiera w sobie załączniki.
Po ściągnięciu wiadomośći automatycznie załączniki wyodrębnione zostają z listu i zapisują się do kat. Temp pod jakimiś tam nazwami o rozszerzeniu *.tmp
Wpisz instrukcie: IdMessage.SaveToFile('KodListu.txt'); w części gdzie pobierasz
wiadomość i sam zerknij... tam są zakodowane załączniki :)

0

Ale jak sprawdzic czy jest cos nowego w skrzynce w jakims okreslonym folderze, bo powyzsze kody pokazuja czy jest cos ogolnie w skrzynce

0

Ale jak sprawdzic czy jest cos nowego w skrzynce w jakims okreslonym folderze, bo powyzsze kody pokazuja czy jest cos ogolnie w skrzynce

Musisz zapisywać nagłówki po każdym odbieraniu maili, a potem przy sprawdzaniu pobierasz nagłówek i sprawdzasz, czy jest zapisany, jeśli nie jest, to znaczy, że mail nie był jeszcze odbierany (czyli jest nowy).

0

Cześć

IdPOP3.Retrieve(poz + 1, IdMessage); //pobranie wiadomości (cały kod listu)
IdMessage.SaveToFile('KodListu.txt'); //zapisanie wiadomości

a tu rozbicie tego na tekst:

 //pobiera body text (list w formie tekstu)...
 if IdMessage.MessageParts.Items[poz] is TIdText then
 begin
   tekst:= TStringList.Create;
   tekst.AddStrings( TIdText(IdMessage.MessageParts.Items[poz]).Body );
   tekst.SaveToFile('list.htm');
 end;

Pic polega na tym że w Indy nie zapiszesz tego w formie listu *.eml
tak jak to można zrobić ściągając wiadomość za pomocą gniazd
Musiałbyś wszystko do "kupki" poskładać - załączniki, body text itd..
Ale co do gniazd jest jeden kłopot o którym wspominałem pytając w
http://4programmers.net/Forum/viewtopic.php?id=58502

0

Pic polega na tym że w Indy nie zapiszesz tego w formie listu *.eml

Nie zapiszesz? Ja to robię tuż po odebraniu (

IdPOP31.Retrieve(j, IdMessage);

)za pomocą zwykłego

TIdMessage.SaveToStream.
0

hmmm..
Znaczy zapisujesz strumień do pliku i wychodzi Ci taki sam kod wiadomości jakbym pobrał go przy pomocy socketów ?
No bo jak go zapisuje też z komponentu IdMessage - tylko że...

IdMessage.SaveToFile('KodListu.txt');

to na tyle się różni
od tego pobranego socketami że nie da rady odczytać go jako *.eml

Mam rozumieć że "składasz" go w całość body, załączniki itd ?
Jeśli możesz to prosiłbym o pare linijek kodu

0

Musisz ustawić sobie właściwość IdMessage NoEncode i NoDecode na true, a potem normalnie odbierasz:

IdPOP31.Retrieve(NrWiadomosci, IdMessage);

Powinno też działaś SaveToFile, tyle że ja robię strumieniem bo szybciej.

0

Dzięki :)
A ja dumałem i pytałem któryś tam raz - dobrze że się pojawiłeś
<full z="z" debowej="debowej" beczki="beczki"> :)

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