Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> IMAP pobieranie załączników.
NickOver
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 10
Dołączył: 13.03.2014
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cześć,

Od jakiegoś czasu męczę się z pobieraniem załączników z emaila. Oczywiście nie chodzi o sam zapis pliku lecz o pobranie samych danych z tego co zwraca imap. Oto mój kod:
  1. public function getAttachmentsForMessage($uid, $mailbox){
  2. $structure = imap_fetchstructure($this->getOrSetConnection($mailbox), $uid, FT_UID);
  3. $attachments = array();
  4. if(isset($structure->parts) && count($structure->parts)) {
  5.  
  6. for($i = 0; $i < count($structure->parts); $i++) {
  7.  
  8. $attachments[$i] = array(
  9. 'is_attachment' => false,
  10. 'filename' => '',
  11. 'name' => '',
  12. 'attachment' => ''
  13. );
  14.  
  15. if($structure->parts[$i]->ifdparameters) {
  16. foreach($structure->parts[$i]->dparameters as $object) {
  17. var_dump($structure->parts[$i]);
  18. if(strtolower($object->attribute) == 'filename') {
  19. $attachments[$i]['is_attachment'] = true;
  20. $attachments[$i]['filename'] = $object->value;
  21. }
  22. }
  23. }
  24.  
  25. if($structure->parts[$i]->ifparameters) {
  26. foreach($structure->parts[$i]->parameters as $object) {
  27. if(strtolower($object->attribute) == 'name') {
  28. $attachments[$i]['is_attachment'] = true;
  29. $attachments[$i]['name'] = $object->value;
  30. }
  31. }
  32. }
  33.  
  34. if($attachments[$i]['is_attachment']) {
  35. $attachments[$i]['attachment'] = imap_fetchbody($this->getOrSetConnection($mailbox), $uid, $i+1, FT_UID);
  36. if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
  37. $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
  38. }
  39. elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
  40. $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
  41. }
  42. }
  43. }
  44. }
  45. }

Sam skrypt jest delikatnie przerobionym kodem z internetów i pobiera on część załączników. Problem pojawia się przy np. plikach .htm które dostaję z np. banku. W tablicy którą zwraca imap pliki te są w kompletnie innym miejscu niż np. pliki jpg czy pdf. Czy zostaje jedynie opcja przelecenia po miejscach w których zauważę występowanie jakiś załączników czy jest na to jakiś inny, mądrzejszy sposób? Jak Wy to robicie?
Go to the top of the page
+Quote Post
adbacz
post
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Zakodziłem kiedyś klasę, która robi to, czego właśnie oczekujesz. Poczytaj sobie kod a ogarniesz jak to działa, tam są dwie metody fetchAttachment() i fetchAttachmentsList(), zobacz gdzie są w kodzie i szukaj dalej względem tych dwóch miejsc a dojdziesz na pewno, jak to dalej działa smile.gif

https://github.com/veronecrm/mod.verone.mai.../MailReader.php
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:54