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]
TIdMessage.Date
TIdMessage.Date
Nie ma takiego czegoś...bo bym już tak dawno zrobił :)
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ć ?
No i o to mi chodziło, dzięki Inter [browar] Jeszcze tylko załacznik musze się nauczyć ściągać z serwera :)
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 :)
Ale jak sprawdzic czy jest cos nowego w skrzynce w jakims okreslonym folderze, bo powyzsze kody pokazuja czy jest cos ogolnie w skrzynce
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).
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
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.
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
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.
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"> :)