Сценарий пересылки PHP IMAP POP отправляет вложения изображений, измененные как-то

Я запускаю сценарий для входа в почтовый ящик IMAP/POP, пересылаю содержимое на новый адрес электронной почты, а затем удаляю их из почтового ящика.

Теперь это почти работает, за исключением того, что по какой-то странной, необъяснимой причине пересылаемые вложенные изображения, которые отправляются на наш сайт Ning, выглядят раздавленными, тогда как электронные письма с вложениями изображений, отправленные непосредственно на адрес электронной почты Ning для загрузки, кажутся идеально сформированными. Итак, что-то в нашем формате пересылаемой электронной почты отличается. Как будто изображения во вложениях не совсем такие, какими были изначально.

Пример загрузки сжатого изображения http://members.bigmanwalking.com/photo/a-test-photo?context=latest

Любая помощь будет замечательной... Это загадка, почему изображения должны были внезапно потерять свою форму, проходя через этот скрипт.

<?php

      // Change to your mail server
      $host = "pop.1and1.co.uk";

      // Connecting to POP3 email server.
      $connection = imap_open("{" . $host . ":110/pop3/notls}", '[email protected]', 'xxxx');

      // Total number of messages in Inbox
      $count = imap_num_msg($connection);
      echo $count . " messages found<br />";

      // Read Messages in Loop, Forward it to Actual User email and than delete it from current email account.
      for ($i = 1; $i <= $count; $i++) {
          $headers = imap_headerinfo($connection, $i);

          $subject = $headers->subject;

          $from = $headers->from[0]->mailbox . '@' . $headers->from[0]->host;
          if ($headers->cc[0]->mailbox)
              $cc = $headers->cc[0]->mailbox . '@' . $headers->cc[0]->host;
          $subject = $headers->subject;

          $structure = imap_fetchstructure($connection, $i);
          //$type = $this->get_mime_type($structure);

          // GET HTML BODY
          //$body = $this->get_part($connection, $i, "");

          $raw_body = imap_body($connection, $i);

          $attachments = array();

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

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

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

                  if ($attachments[$e]['is_attachment']) {
                      $attachments[$e]['attachment'] = @imap_fetchbody($connection, $i, $e + 1);
                      if ($structure->parts[$e]->encoding == 3) {
                          // 3 = BASE64
                          $attachments[$e]['attachment'] = base64_decode($attachments[$e]['attachment']);
                      } //if ($structure->parts[$e]->encoding == 3)
                      elseif ($structure->parts[$e]->encoding == 4) {
                          // 4 = QUOTED-PRINTABLE
                          $attachments[$e]['attachment'] = quoted_printable_decode($attachments[$e]['attachment']);
                      } //elseif ($structure->parts[$e]->encoding == 4)
                  } //if ($attachments[$e]['is_attachment'])

                  if ($attachments[$e]['is_attachment']) {
                      $filename = $attachments[$e]['filename'];
                      $filename = $attachments[$e]['name'];
                      $filecontent = $attachments[$e]['attachment'];
                  } //if ($attachments[$e]['is_attachment'])
              } //for ($e = 0; $e < count($structure->parts); $e++)
          } //if (isset($structure->parts) && count($structure->parts))



          echo "<pre>";
          echo "From: " . $headers->Unseen . "<br />";
          echo "From: " . $from . "<br />";
          echo "Cc: " . $cc . "<br />";
          echo "Subject: " . $subject . "<br />";
          echo "Content Type: " . $type . "<br />";
          echo "Body: " . $body . "<br />";


          $mail = new Zend_Mail();

          $mail->settype(Zend_Mime::MULTIPART_MIXED);

          for ($k = 0; $k < count($attachments); $k++) {
              $filename = $attachments[$k]['name'];
              $filecontent = $attachments[$k]['attachment'];

              if ($filename && $filecontent) {
                  $file = $mail->createAttachment($filecontent);
                  $file->filename = $filename;
              } //if ($filename && $filecontent)
          } //for ($k = 0; $k < count($attachments); $k++)


          $mail->setFrom($from);
          $mail->addTo('[email protected]');
          if ($cc)
              $mail->addCc($cc);
          $mail->setSubject($subject);
          $mail->setBodyHtml($body);
          $mail->send();

          // Mark the email messages once read
          imap_delete($connection, $i);

      } //for ($i = 1; $i <= $count; $i++)
      // Delete all marked message from current email account.

      imap_expunge($connection);

?>


person Nimloc    schedule 28.06.2012    source источник
comment
Я сузил проблему до неприменения типа MIME к вложениям в приведенном выше сценарии.   -  person Nimloc    schedule 29.06.2012


Ответы (1)


Нашел ответ. Это должно было определить типы Mime вложений и добавить типы Mime к вложениям в исходящем электронном письме. Как только это было сделано, фотографии появились на Нин в правильном соотношении.

Нужная мне помощь была найдена здесь http://php.net/manual/en/function.imap-fetchstructure.php

person Nimloc    schedule 28.06.2012
comment
Привет, @Nimloc, я знаю, что это старая тема, но мне нужно именно это решение. У вас все еще есть копия вашего окончательного сценария? - person Matt Glover; 30.03.2019