Autor Téma: IMAP vycteni prichozích mailu  (Přečteno 4646 krát)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 322
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:IMAP vycteni prichozích mailu
« Odpověď #30 kdy: 03-09-2018, 13:02:49 »
tak nacteni mailu do MEMO bych mel hotovy, ale ted jak to dostat do toho dbgridu aby se mi to i rozdelilo... do kolonky od aby se nacetlo od koho to prislo, datum kdy to prislo atd....

Kód: Delphi [Vybrat]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   MsgCount : Integer;
  4.   i        : Integer;
  5.   FMailMessage :  TIdMessage;
  6. begin
  7.   Memo1.Lines.Clear;
  8.   //The IdPop31 is on the form so it is constructing when the
  9.   //form is created and so is Memo1.
  10.   IdPOP31.Host      := 'pop3.seznam.cz'; //Setting the HostName;
  11.   IdPOP31.Username  := 'XXXXXXXX';//Setting UserName;
  12.   IdPOP31.Password  := 'XXXXXXXX';//Setting Password;
  13.   IdPOP31.Port      := 110;//Setting Port;
  14.  
  15.   try
  16.     IdPOP31.Connect();
  17.    //Getting the number of the messages that server has.
  18.     MsgCount := IdPOP31.CheckMessages;
  19.     for i:= 0 to Pred(MsgCount) do
  20.     begin
  21.       try
  22.         FMailMessage := TIdMessage.Create(nil);
  23.         IdPOP31.Retrieve(i,FMailMessage);
  24.         Memo1.Lines.Add('=================================================');
  25.         Memo1.Lines.Add(FMailMessage.From.Address);
  26.         Memo1.Lines.Add(FMailMessage.Recipients.EMailAddresses);
  27.         Memo1.Lines.Add(FMailMessage.Subject);
  28.         Memo1.Lines.Add(FMailMessage.Sender.Address);
  29.         Memo1.Lines.Add(FMailMessage.Body.Text);
  30.         Memo1.Lines.Add('=================================================');
  31.       finally
  32.         FMailMessage.Free;
  33.       end;
  34.     end;
  35.   finally
  36.     IdPOP31.Disconnect;
  37.   end;
  38. end;

Ale stejne me to vypisuje nesmysli v tele zpravy.... ocividne to cte nesmysli pokud je zprava v HTML
« Poslední změna: 03-09-2018, 13:18:28 od Kony »

Offline mirus

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 12
    • Verze Delphi: Delphi 10.2
Re:IMAP vycteni prichozích mailu
« Odpověď #31 kdy: 03-09-2018, 14:07:33 »
Tak to chce začít z druhé strany a nejprve se naučit vytvořit databázovou aplikaci, pokud chceš používat DBGrid.

DBGrid pouze zobrazuje data.

DBGrid se musí propojit s komponentou DataSource a do DataSource se musí pripojit DataSet (např. ClientDataSet, VirtualTable, SQLiteDataSet).

Informace o emailech ukládat do polí datasetu, které poskytuji data pro sloupce DBGridu.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 322
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:IMAP vycteni prichozích mailu
« Odpověď #32 kdy: 03-09-2018, 14:11:26 »
aplikaci mam vytvorenou.... do DBgridu ukladam odeslanou postu, ale jeste bych chtel, abych mohl do tohototo dbgridu prave davat i prijatou postu. tu bych filtroval podle mailu..

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 322
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:IMAP vycteni prichozích mailu
« Odpověď #33 kdy: 03-09-2018, 14:53:04 »
Takze abych nacetl ty hodnoty do prvniho policka DBGrid kdy mail prisel, do druhyho od koho prisel mail, do dalsiho policka predmet zpravy a dodalsiho text zpravy


A jeste v textu zpravy mi to pise "?UTF-8?Q?Re=3A_xx_objedn=C3=A1vka?="

takze urcite to ma problem ze zobrazenim html zpravy, takze opet nepouzitelny
« Poslední změna: 03-09-2018, 15:12:30 od Kony »

Offline mirus

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 12
    • Verze Delphi: Delphi 10.2
Re:IMAP vycteni prichozích mailu
« Odpověď #34 kdy: 03-09-2018, 15:16:10 »
V unitě IdCoderHeader je funkce DecodeHeader();

Po stažení hlavičky emailu se mi automaticky procedure IdMessage.ProcessHeaders vše přeloží.

Nemusím v kódu nic překládat.

Kód: Delphi [Vybrat]
  1.  
  2. var
  3.   Mime : TIdMessage;
  4.  
  5. Subject := Mime.Subject;
  6.  
  7.  

Verze Indy '10.6.2.5366'.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 322
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:IMAP vycteni prichozích mailu
« Odpověď #35 kdy: 03-09-2018, 15:22:34 »
tak jsem to pouzil takto a stejne chyby

Kód: Delphi [Vybrat]
  1. var
  2. mailcount : integer;
  3. MsgCount : integer;
  4. i: integer ;
  5. msg : TIdmessage;
  6. FMailMessage : TIdmessage ;
  7. Mime : TIdMessage;
  8.  
  9. begin
  10.   try
  11.   //  IdPOP31.Connect();
  12.    //Getting the number of the messages that server has.
  13.     MsgCount := IdPOP31.CheckMessages;
  14.     for i:= 0 to Pred(MsgCount) do
  15.     begin
  16.       try
  17.         Mime := TIdMessage.Create(nil);
  18.         IdPOP31.Retrieve(i,Mime);
  19.         maillist.Lines.Add('=================================================');
  20.         maillist.Lines.Add(Mime.From.Address);
  21.         maillist.Lines.Add(Mime.Recipients.EMailAddresses);
  22.         maillist.Lines.Add(Mime.Subject);
  23.         maillist.Lines.Add(Mime.Sender.Address);
  24.         maillist.Lines.Add(Mime.Body.Text);
  25.         maillist.Lines.Add('=================================================');
  26.       finally
  27.         Mime.Free;
  28.       end;
  29.     end;
  30.   finally
  31.     IdPOP31.Disconnect;
  32.   end;
  33.  end;

v nekterych zpravach to pise "This is a multi-part message in MIME format."
« Poslední změna: 03-09-2018, 15:30:53 od Kony »

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:IMAP vycteni prichozích mailu
« Odpověď #36 kdy: 03-09-2018, 15:34:40 »
To není chyba. Prostě ti přišla multipart zpráva a ty sis z ní vytáhl pouze její textovou část, kterou shodou okolností kient udělal nepoužitelně. Pokud to chceš řešit, musíš si najít i ostatní části a vybrat si z nich tu nejpoužitelnější. Nebo vynadat odesílajícímu. Ale v první řadě by sis měl nastudovat něco o tom, jak se kódují mailové zprávy.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 322
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:IMAP vycteni prichozích mailu
« Odpověď #37 kdy: 03-09-2018, 15:35:58 »
tohle chapu.... jen je to potom pro me asi nepouzitelny, kdyz nedokazu nacist do DBGridu pouzitelny text...

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:IMAP vycteni prichozích mailu
« Odpověď #38 kdy: 03-09-2018, 16:11:04 »
Těžko můžeš načíst použitelný text, když ho klient nevytvoří. Bohužel, místo aby se zprávy posílaly v TXT a případně volitelně jako HTML, tak je někteří klienti posílají jako HTML a pokud si uživatel řekne (což si neřekne, protože neví, proč by t měl dělat), tak i jako TXT alternativu. Asi tak jedinou možnost, pokud chceš takové klienty podporovat, je vytáhnout si z mailu HTML zprávu a zkonvertovat ji do textu. Nejjednodušší*) způsob, jak to udělat, je zkompilovat si elinks a říct si mu, ať ti tu HTML zprávu vyrenderuje do textu...

*) To není totéž co "jednoduché".