Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IMAP pobieranie załączników.
Forum PHP.pl > Forum > PHP
NickOver
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?
adbacz
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.