Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: выгрузка вложений из почты
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » выгрузка вложений из почты

Страниц (1): [1]
 

1. seriousdark - 04 Марта, 2018 - 10:12:51 - перейти к сообщению
Здравствуйте, я в пхп полный 0 поставили задачу выгружать с почты вложения, я нашел рабочий скрипт только он не выгружает файлы с русским названием.
я понимаю что нужно где то задать параметр iconv UTF-8 а от где и как хз, убил несколько дней на изучение пхп но толку 0.
Помогите пожалуйста.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. $hostname = '{imap.ukr.net:993/imap/ssl/novalidate-cert}INBOX';
  5. $username = ''; # например somebody@gmail.com
  6. $password = '';
  7.  
  8. $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
  9.  
  10. $emails = imap_search($inbox,'ALL');
  11. $max_emails = 16;
  12.  
  13. if($emails) {
  14.  
  15.     $count = 1;
  16.      rsort($emails);
  17.      foreach($emails as $email_number)
  18.     {
  19.  
  20.         /* get information specific to this email */              
  21.         $overview = imap_fetch_overview($inbox,$email_number,0);
  22.  
  23.         /* get mail message */
  24.         $message = imap_fetchbody($inbox,$email_number,2);
  25.  
  26.         /* get mail structure */
  27.         $structure = imap_fetchstructure($inbox, $email_number);
  28.  
  29.         $attachments = array();
  30.  
  31.         /* if any attachments found... */
  32.         if(isset($structure->parts) && count($structure->parts))
  33.         {
  34.             for($i = 0; $i < count($structure->parts); $i++)
  35.             {
  36.                 $attachments[$i] = array(
  37.                     'is_attachment' => false,
  38.                     'filename' => '',
  39.                     'name' => '',
  40.                     'attachment' => ''
  41.                 );
  42.  
  43.                 if($structure->parts[$i]->ifdparameters)
  44.                 {
  45.                     foreach($structure->parts[$i]->dparameters as $object)
  46.                     {
  47.                         if(strtolower($object->attribute) == 'filename')
  48.                         {
  49.                             $attachments[$i]['is_attachment'] = true;
  50.                             $attachments[$i]['filename'] = $object->value;
  51.                         }
  52.                     }
  53.                 }
  54.  
  55.                 if($structure->parts[$i]->ifparameters)
  56.                 {
  57.                     foreach($structure->parts[$i]->parameters as $object)
  58.                     {
  59.                         if(strtolower($object->attribute) == 'name')
  60.                         {
  61.                             $attachments[$i]['is_attachment'] = true;
  62.                             $attachments[$i]['name'] = $object->value;
  63.                         }
  64.                     }
  65.                 }
  66.  
  67.                 if($attachments[$i]['is_attachment'])
  68.                 {
  69.                     $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
  70.                
  71.                     /* 4 = QUOTED-PRINTABLE encoding */
  72.                 if($structure->parts[$i]->encoding == 3)
  73.                    
  74.                        {
  75.                         $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
  76.                     }
  77.                     /* 3 = BASE64 encoding */  
  78.                  elseif($structure->parts[$i]->encoding == 4)
  79.                     {
  80.                         $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
  81.                     }
  82.                 }
  83.                
  84.                
  85.                 }
  86.         }
  87.  
  88.         /* iterate through each attachment and save it */
  89.         foreach($attachments as $attachment)
  90.         {
  91.             if($attachment['is_attachment'] == 1)
  92.             {
  93.                 $filename = $attachment['name'];
  94.                   if(empty($filename)) $filename = $attachment['filename'];
  95.                 if(empty($filename)) $filename = time() . "dat";
  96.                    
  97.                 /* prefix the email number to the filename in case two emails
  98.                  * have the attachment with the same file name.
  99.                  */
  100.         $fp = fopen('/mnt/c/ubuntu/pochta/'. $filename, 'w+');
  101.               fwrite($fp, $attachment['attachment']);
  102.              fclose($fp);
  103.             }
  104.  
  105.         }
  106.  
  107.         if($count++ >= $max_emails) break;
  108.     }
  109.  
  110. }
  111.  
  112. /* close the connection */
  113. imap_close($inbox);
  114.  
  115. echo "Done\n";
  116.  
  117. ?>
  118.  
2. Vladimir Kheifets - 06 Марта, 2018 - 07:57:40 - перейти к сообщению
seriousdark пишет:
Здравствуйте, я в пхп полный 0 поставили задачу выгружать с почты вложения, я нашел рабочий скрипт только он не выгружает файлы с русским названием.
я понимаю что нужно где то задать параметр iconv UTF-8 а от где и как хз, убил несколько дней на изучение пхп но толку 0.
Помогите пожалуйста.

Здравствуйте, по поводу файлов с русскими названиями, посмотрите здесь:
http://forum.php.su/topic.php?fo...90087#1415790087
Могу добавить.
Возможно, что необходимо не только сохранять вложения, но где-то сохранять информацию к о том, какому письму, какие файлы прикреплены. Поэтому может быть, проще генерировать имена файлов для вложений и сохранять их вместе со ссылкой на письмо и именами файлов указанных в письме.
Удачи!
3. seriousdark - 05 Апреля, 2018 - 11:35:10 - перейти к сообщению
Может кому нужен будет, полностью рабочий
PHP:
скопировать код в буфер обмена
  1.  
  2. #!/usr/bin/php
  3. <?PHP
  4.  
  5.  
  6. $hostname = '{imap.ukr.net:993/imap/ssl/novalidate-cert}INBOX';
  7. $username = ''; # например somebody@gmail.com
  8. $password = '';
  9.  
  10. $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
  11.  
  12. $emails = imap_search($inbox,'ALL');
  13. $max_emails = 10;
  14.  
  15. if($emails) {
  16.  
  17.     $count = 1;
  18.      rsort($emails);
  19.      foreach($emails as $email_number)
  20.     {
  21.  
  22.         /* get information specific to this email */                           
  23.         $overview = imap_fetch_overview($inbox,$email_number,0);
  24.  
  25.         /* get mail message */
  26.         $message = imap_fetchbody($inbox,$email_number,2);
  27.  
  28.         /* get mail structure */
  29.         $structure = imap_fetchstructure($inbox, $email_number);
  30.  
  31.         $attachments = array();
  32.  
  33.         /* if any attachments found... */
  34.                
  35.         if(isset($structure->parts) && count($structure->parts))
  36.         {
  37.        
  38.             for($i = 0; $i < count($structure->parts); $i++)
  39.             {
  40.                                
  41.                 $attachments[$i] = array(
  42.                     'is_attachment' => false,
  43.                     'filename' => '',
  44.                     'name' => '',
  45.                     'attachment' => ''
  46.                 );
  47.  
  48.                 if($structure->parts[$i]->ifdparameters)
  49.                 {
  50.  
  51.                     foreach($structure->parts[$i]->dparameters as $object)
  52.                     {
  53.                         if(strtolower($object->attribute) == 'filename')
  54.                         {
  55.                             $attachments[$i]['is_attachment'] = true;
  56.                             $attachments[$i]['filename'] = $object->value;
  57.                         }
  58.                     }
  59.                 }
  60.  
  61.                 if($structure->parts[$i]->ifparameters)
  62.                 {
  63.                     foreach($structure->parts[$i]->parameters as $object)
  64.                     {
  65.  
  66.                         if(strtolower($object->attribute) == 'name')
  67.                         {
  68.                             $attachments[$i]['is_attachment'] = true;
  69.                             $attachments[$i]['name'] = $object->value;
  70.                         }
  71.                     }
  72.                 }
  73.  
  74.                 if($attachments[$i]['is_attachment'])
  75.                 {
  76.                     $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
  77.                                
  78.                     /* 4 = QUOTED-PRINTABLE encoding */
  79.                 if($structure->parts[$i]->encoding == 3)
  80.                                        
  81.                                 {
  82.                         $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
  83.                     }
  84.                     /* 3 = BASE64 encoding */  
  85.                  elseif($structure->parts[$i]->encoding == 4)
  86.                     {
  87.                         $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
  88.                     }
  89.                 }
  90.                                
  91.                                
  92.                                 }
  93.         }
  94.  
  95.         /* iterate through each attachment and save it */
  96.         foreach($attachments as $attachment)
  97.         {
  98.             if($attachment['is_attachment'] == 1)
  99.             {
  100.                 $filename = $attachment['name'];  
  101.                                 $filename = imap_utf8($filename);
  102.                             if(empty($filename)) $filename = $attachment['filename'];
  103.                 if(empty($filename)) $filename = time() . "dat";
  104.                                        
  105.                 /* prefix the email number to the filename in case two emails
  106.                  * have the attachment with the same file name.
  107.                  */
  108.                 $fp = fopen('/mnt/c/ubuntu/pochta/'. $filename, 'w+');
  109.               fwrite($fp, $attachment['attachment']);
  110.              fclose($fp);
  111.                          }
  112.  
  113.         }
  114.  
  115.         if($count++ >= $max_emails) break;
  116.     }
  117. }
  118. /* close the connection */
  119. imap_close($inbox);
  120.  
  121. echo "Done\n";
  122.  
  123. ?>

 

Powered by ExBB FM 1.0 RC1