idPOP3-odbieranie maili

0

Kurde juz tyle czas mineło a ja jeszcze tego nie zrobiłem.Coś mi nie idze.Jak ktoś wie kurcze pliz powiedzcie jak to zrobić??

Aha mam takie cos ale ja nie wiem jakie sąto komponęty i jakie im dać nazwy

Sieci globalne
Programowaie aplikacji sieciowych w systemie Delphi
protokół POP3
Zapoznac sie z protokołem pocztowym Post Oce Protocol — POP3 (norma rfc1939),
a nastepnie napisac i uruchomic program do odbioru poczty oparty na zastosowaniu komponentu
klasy TIdPOP3 z pakietu Indy. Aby zrealizowac program mozna posłuzyc sie
fragmentami ponizszego kodu:
Nawiazanie połaczenia
POP.Host := Pop3ServerName;
POP.Port := Pop3ServerPort;
POP.UserID := Pop3ServerUser;
POP.Password := Pop3ServerPassword;
POP.Connect;
Informacja o skrzynce
FMsgCount := POP.CheckMessages;
FMailBoxSize := POP.RetrieveMailBoxSize div 1024;
Informacja o wiadomosciach
POP.RetrieveHeader(intIndex, IdMessage1);
itm := ListView1.Items.Add;
itm.Caption := IdMessage1.Subject; // temat
itm.SubItems.Add(IdMessage1.From.Text); // nadawca
itm.SubItems.Add(DateToStr(IdMessage1.Date)); // data
itm.SubItems.Add(IntToStr(POP.RetrieveMsgSize(intIndex))); // rozmiar
Odbiór poczty
POP.Retrieve(ListView1.Selected.Index + 1, IdMessage1);
LabelFrom.Caption := IdMessage1.From.Text;
LabelRecipients.Caption := IdMessage1.Recipients.EmailAddresses;
LabelCc.Caption := IdMessage1.CCList.EMailAddresses;
LabelSubject.Caption := IdMessage1.Subject;
LabelDate.Caption := FormatDateTime(’dd mmm yyyy hhss’,IdMessage1.Date);
LabelReceipt.Caption := IdMessage1.ReceiptRecipient.Text;
LabelOrganization.Caption := IdMessage1.Organization;
LabelPriority.Caption := IntToStr(Ord(IdMessage1.Priority) + 1);
for intIndex := 0 to Pred(IdMessage1.MessageParts.Count) do
begin
if (IdMessage1.MessageParts.Items[intIndex] is TIdAttachment) then
begin
li := ListViewMessageParts.Items.Add;
li.Caption :=
TIdAttachment(IdMessage1.MessageParts.Items[intIndex]).Filename;
end
else
begin //body text
if Msg.MessageParts.Items[intIndex] is TIdText then
begin
Memo1.Lines.Clear;
Memo1.Lines.AddStrings(
TIdText(IdMessage1.MessageParts.Items[intIndex]).Body);
end
end;
end;
Usuniecie wiadomosci
POP.Delete(intIndex);
Rozłaczenie
POP.Disconnect;

0

z tego by wynikało, że do odbierania poczty trzeba użyć procedurki IdPOP3.Retrieve({tutaj numer wiadomości na serwerze}, IdMessage1);
Ta akurat wpisywać będzie wiadomośc numer jakiśtam do IdMessage1.

Najlepiej byłoby użyć do odbioru mniej więcej takiej procedurki:

procedure TForm1.OdbiorMaili;
var i: integer;
Wiad: TStringList;
begin
Wiad := TStringList.Create;
try
IdPOP3.Connect;
for i := 0 to IdPOP3.CheckMessages do
begin
IdPOP3.Retrieve(i, IdMessage1);
Wiad.Append(IdMessage1.From.Address);
Wiad.AddStrings(IdMessage1.Body);
Wiad.SaveToFile('mess' + IntToStr(i) + '.txt'); //zapisz do pliku numer.txt - można to zmienic na cos innego
Wiad.Clear;
end;
finally
IdPOP3.Disconnect;
end;
end;

To jest przykładzik - ja proponuję np. tworzyć tablicę IdMessage i do odpowiednich pol wpisywac wyniki, a nie tworzyc jakies glupie StringLIsty

0

Możesz zrobić mały pzykładzik albo kod wpisać.Z wykozystaniem ListView i RichEdit błagam :(

0

moge napisac kodzik i nawet umiescic go na 4p, ale o jaki richedit i ListView ci chodzi? Zebym sciagal poczte, pokazywal naglowki w listview i po kliknieciu ladowal do richedit? OK, jak tylko będę miał czas - w piątek/weekend.

0

OK dzięki o to własnie mi chodziło.Robie pewien program i tego mi tylko brakowało

0

W demosach iniego jest opisane wszystko o czym piszesz (nawet cały program mailowy)

0

W demosach iniego jest opisane wszystko o czym piszesz (nawet cały program mailowy)

a może wiesz jak załadować do IdMessage1 wiadomość nie
z servera pop3 tylko z dysku w postaci np. pliku *.eml

0

[...]
a może wiesz jak załadować do IdMessage1 wiadomość nie
z servera pop3 tylko z dysku w postaci np. pliku *.eml

{...}
Texcior: TStrings;
begin
Texcior:=TStrings.Create;
Texcior.LoadFromFile(Nazwa plika);
MessageSend.Body.Assign(Texcior);
{...}

Mniej więcej tak...

0

Mniej więcej tak...

eeeee.... [glowa] :-8

Może i to przypisuje do body jakiś tam text ale nie działa
tak jak w przypadku servera, to znaczy nie dzieli wiadomości
na MessageParts i nie rozkodowuje załączników z base64
a mi na tym zależy żeby mieć dostęp do pliku eml tak jak
do wiadomości na serverze ;-( :-/

ale i tak dzięki [love]

0

Witam
Heh, widzę, że do tego wątku dawno już nikt nic nie napisał. :(
Prosiłbym o posty dotyczącego tego problemu. Właśnie mam tę samą zagwostkę co piechnat, to znaczy IDMesssage nie chce czytać maili w formacie .eml. A może coś tam trzeba zmienic w tych outlookowskich plikach i będzie dobrze?

No i jeszcze drugi problem z IdMessage, mianowicie SaveToFile generuje mi bład "Acces violation" . Korzystam z InDy 9.14.
Proszę o pomoc.

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