Загрузка вложений к каталогу с IMAP в PHP, случайным образом работы

Я нашел, что PHP кодируют онлайн для загрузки вложений на каталог с помощью IMAP отсюда. http://www.nerdydork.com/download-pop3imap-email-attachments-with-php.html

Я изменил его немного изменение

        $structure = imap_fetchstructure($mbox, $jk);
        $parts = ($structure->parts);

кому:

        $structure = imap_fetchstructure($mbox, $jk);
        $parts = ($structure);

чтобы заставить это работать правильно, как иначе, я получил ошибку о том, как stdClass не определяет свойство, названное $parts. Делая это, я смог загрузить все вложения. Я протестировал его снова недавно, хотя, и это не работало. Ну, это не работало 6 раз, работавшее 7-е, и затем не работало с тех пор. Я думаю, что это имеет некоторое отношение ко мне завинчивающий обработку частей, так как количество ($parts) продолжает возвращаться 1 для каждого сообщения, таким образом, это не находит вложений, я думаю.

Так как это загрузило вложения однажды без проблем, я уверен, что вещи области становятся завинченными, прямо здесь. Прежде чем этот блок кода для цикла, который проходит каждое сообщение в поле, и после того, как это - цикл, который просто проходит $parts для каждой структуры IMAP. Спасибо за любую справку можно обеспечить. Я посмотрел на imap_fetchstructure страницу на php.net и не могу выяснить то, что я делаю неправильно.

Править: Я просто перепроверил папку после ввода моего вопроса, и все это открылось. Я чувствую, что схожу с ума. Я не выполнил код с тех пор за несколько минут до того, как я начал вводить это, и он не имеет смысла мне, что он занял бы у этого много времени для инициирования. У меня есть приблизительно 800 сообщений в почтовом ящике, но я фигурировал, так как он распечатал мой оператор в самом конце PHP, что вся работа создания файла была сделана.

20
задан Nick 15 April 2010 в 23:11
поделиться

1 ответ

Посмотрите этот код:

           $structure = imap_fetchstructure($mailbox, $index);

       $attachments = array();
       if(isset($structure->parts) && count($structure->parts)) {
         for($i = 0; $i < count($structure->parts); $i++) {
           $attachments[$i] = array(
              'is_attachment' => false,
              'filename' => '',
              'name' => '',
              'attachment' => '');

           if($structure->parts[$i]->ifdparameters) {
             foreach($structure->parts[$i]->dparameters as $object) {
               if(strtolower($object->attribute) == 'filename') {
                 $attachments[$i]['is_attachment'] = true;
                 $attachments[$i]['filename'] = $object->value;
               }
             }
           }

           if($structure->parts[$i]->ifparameters) {
             foreach($structure->parts[$i]->parameters as $object) {
               if(strtolower($object->attribute) == 'name') {
                 $attachments[$i]['is_attachment'] = true;
                 $attachments[$i]['name'] = $object->value;
               }
             }
           }

           if($attachments[$i]['is_attachment']) {
             $attachments[$i]['attachment'] = imap_fetchbody($connection, $message_number, $i+1);
             if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
               $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
             }
             elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
               $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
             }
           }             
         } // for($i = 0; $i < count($structure->parts); $i++)
       } // if(isset($structure->parts) && count($structure->parts))
2
ответ дан 29 November 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: