Program pocztowy - pobieranie tresci

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » piÄ…tek, 5 czerwca 2009, 04:50

Witam.
Zaczynam pisac program pocztowy, korzystam z Buildera 2009 i Indy 10.
Czy moze mi ktos napisac jak pobrac tresc i zalacznik wiadomosci?
Doszukalem sie informacji pod Delphi ale nie wszystko udalo mi sie przelozyc na C++Builder.
Jak sprawdzic ktora czesc jest Text a ktora Attachment?
Bardzo prosze o kawalek kodu ktory to realizuje, do tej pory pobralem naglowki z IdMessage ale nie moge odzyskac tresci :(
Z gory dziekuje za pomoc.
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez Miroo_007 » piÄ…tek, 5 czerwca 2009, 10:35

TIdMessage:
  • TIdMessage->Body – zawiera tresc przesyÅ‚anej wiadomosci
  • TIdMessage->CharSet – okresla sposób kodowania znaków w wiadomosci
  • TIdMessage->ContentType – okresla typ wiadomosci
  • TIdMessage->Date – zawiera informacje o dacie wysÅ‚ania wiadomosci
  • TIdMessage->From – zawiera adres nadawcy wiadomosci
  • TIdMessage->Recipients – zawiera adres odbiorcy wiadomosci
TIdPOP3:
  • TIdPOP3->Host - okresla adres serwera
  • TIdPOP3->Password - okresla hasÅ‚o
  • TIdPOP3->Port - okresla port, na którym program bedzie Å‚aczyÅ‚ sie z serwerem
  • TIdPOP3->Username – okresla login użytkownika.
  • bool TIdPOP3->Connected() - okresla czy nawiazano poÅ‚aczenie
  • void TIdPOP3->Connect() - próbuje nawiazac poÅ‚aczenie z serwerem
  • int TIdPOP3->CheckMessages() - zwraca liczbe wiadomosci w skrzynce
  • void TIdPOP3->Disconnect() - konczy poÅ‚aczenie z serwerem.
  • bool TIdPOP3->Retrieve(const int MsgNum, TIdMessage AMsg)– pobiera wiadomosc o wskazanym indeksie i umieszcza w zmiennej AMsg
Program sprawdza, pobiera jedna wiadomość oraz wszystkie załączniki do tej wiadomości.
Należy zwrócić uwagę na problem z logowaniem się do serwera Gmail. Ponieważ ten serwer posiada szyfrowanie SSL ale ten problem został omówiony tutaj:
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender) {
     IdPOP31->Host = pop3.wp.pl;
     IdPOP31->Port = 110;  //110 jest bez szyfrowania SSL
     IdPOP31->Username = uzytkownik;
     IdPOP31->Password = password;
     try {
          IdPOP31->Connect(-1);  }
     catch(Exception &e) {   }
     if(IdPOP31->Connected()) {
           int ilosc_maili = IdPOP31->CheckMessages();
           if(ilosc_maili > 0) {
                 IdPOP31.Retrieve(1, IdMessage1);
                 for(int i=0; i < IdMessage1->MessageParts->Count; i++) {
                      if(IdMessage1->MessageParts->Items[i]->DisplayName=="TIdAttachment") {
                              TIdAttachment *zal = (TIdAttachment*)IdWiadomosci->MessageParts->Items[i];
                              zal->SaveToFile("C:\\Zalaczniki\\zalacznik.txt");
                      }
                 }
           }
           IdPOP31->Disconnect();
     }
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » piÄ…tek, 5 czerwca 2009, 17:16

Dzieki wielkie :)
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » niedziela, 7 czerwca 2009, 22:06

Jesli zamiast TIdAttachment wstawie TIdText to chyba powinien mi zwrocic tresc, ale kod:

if(IdMessage1->MessageParts->Items[i]->DisplayName=="TIdText")
{

zm_tresc= IdMessage1->MessageParts->Items[i]->ToString();
}

tego nie realizuje... zm_tresc (AnsiString) ma zawartosc "TIdText" a nie rzeczywista tresc wiadomosci.

Z gory dziekuje za odpowiedz.
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez Miroo_007 » poniedziaÅ‚ek, 8 czerwca 2009, 11:09

Od momentu wykonania instrukcji:
Kod: Zaznacz cały
IdPOP31->Retrieve(1, IdMessage1);

wiadomość (oraz jej treść) jest przechowywana w obiekcie IdMessage1. Aby otrzymać treść wiadomości należy wykonać taki kod:
Kod: Zaznacz cały
zm_tresc = IdMessage1->Body;


P.S. Zadawaj pytania tylko na forum.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » poniedziaÅ‚ek, 8 czerwca 2009, 20:08

staram sie wstawic to na LV wiec wykonuje kod:

Kod: Zaznacz cały
TListItem *Temp = ListView1->Items->Add();
  Temp->Caption = IdMessage1->From->Text;
  Temp->SubItems->Add(IdMessage1->Subject);
  Temp->SubItems->Add(IdMessage1->Date);
  Temp->SubItems->Add(IdMessage1->Body->Text);
  Temp->SubItems->Add(IdMessage1->ContentType);
  Temp->SubItems->Add(i);


Po uzyciu IdMessage1->Body->Text w przypadku wiadomosci wysylanych z Outlook Express wstawia mi w tresci:
This is a multi-part message in MIME format. (i dwa kwadraciki - zawsze wyswietla na koncu dwa kwadraciki)
jesli wysylam wiadomosci z programu na IdSMTP: wywietla tresc + dwa kwadraciki.
ContentType odpowiednio dla obu wiadomosci to 1. multipart/alternative i 2. text/plain

Jesli uzyje IdMessage1->Body->ToString() w tresci wyswietla: "TStringList", nie zaleznie od zrodla wiadomosci.

Co zrobic zeby pobieral tresc nie zaleznie od jej typu i nie wywalal kwadracikow na koncu?
Ostatnio edytowano wtorek, 9 czerwca 2009, 08:53 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: wstawiono kod w blok [CODE]
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez Miroo_007 » poniedziaÅ‚ek, 8 czerwca 2009, 20:35

Zapewne chodzi o kodowanie.
Miroo_007 napisał(a):
  • TIdMessage->CharSet – okresla sposób kodowania znaków w wiadomosci

Musisz się po prostu pobawić z różnym ustawianiem kodowania.

P.S. Używaj znaczników do określania kodu (Code) oraz innych. To czyni tekst bardziej czytelnym.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » niedziela, 16 sierpnia 2009, 21:30

Witam,
Nadal nie moge wyswietlic tresci typu MIME. Sprawdzalem CharSet i wymusilem zmiane typu w ContentType ale nadal albo ignoruje cala tresc albo wyswietla wspomniany wczesniej komunikat: This is a multi-part message in MIME format.

IdMessage1->Body->Text dziala tylko i wylacznie w przypadku zwyklego tekstu, do tej pory nie udalo mi sie dokonac skutecznej konwersji z typu multipart/alternative.
Ma ktos jeszcze jakis pomysl jak to zrobic?
Z gory dzieki za poswiecony czas.
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 17 sierpnia 2009, 13:22

Funkcja ToString() konwertuje nazwę klasy obiektu na wartość typu String. Nie ma tutaj zastosowania, więc zapomnij o niej.

Tutaj masz wszystko na ten temat:
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » poniedziaÅ‚ek, 17 sierpnia 2009, 13:58

dzieki wielkie, zapoznam sie z zawartoscia pliku :) wstepnie go przejrzalem i juz chyba wiem o co chodzilo tylko musze to sprawdzic empirycznie.
Dzieki raz jeszcze za pomoc.
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » piÄ…tek, 21 sierpnia 2009, 21:44

wiem juz o jaka linijke chodzi, ale builder (wersja 2009) sie pluje na niej (to linijka z pdf'a ktory byl podlinkowany):

Kod: Zaznacz cały
    TIdText  *IdText = (TIdText*)IdMessage1->MessageParts->Items[i];


a konkretnie wywala bledy:
E2451 Undefined symbol 'TIdText'
E2451 Undefined symbol 'IdText'
E2188 Expression syntax

i nie wiem czemu? powinienem dodac jakis plik naglowkowy?
Z gory dzieki za odpowiedz
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez Witold » sobota, 22 sierpnia 2009, 09:49

mentalmesh napisał(a):powinienem dodac jakis plik naglowkowy?


Wg helpa "IdText" w BCB pewnie #include <IdText.hpp>
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Program pocztowy - pobieranie tresci

Nowy postprzez mentalmesh » sobota, 22 sierpnia 2009, 12:48

dzieki, ja sprawdzilem IdText.h - wszystkie pliki wstawiane domyslnie maja h a nie hpp ale jednak wymaga IdText.hpp.
Teraz odzyskuje tresc - nawet 2 razy na e-mail ;)
Dziekuje wszystkim za pomoc.
Pozdrawiam
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Aplikacje sieciowe

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość