MailAttachmentsSaver.php 3.92 KB
<?php
/**
 * Created by PhpStorm.
 * User: Cibermag
 * Date: 01.09.2015
 * Time: 10:53
 */

namespace common\components\parsers;


use common\components\CustomVarDamp;

class MailAttachmentsSaver
{
//$hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox';
    protected $connection;

    public function __construct($hostname, $username, $password)
    {
        $this->connection = imap_open($hostname, $username, $password);
        CustomVarDamp::dumpAndDie( $this->connection);
        if ($this->connection === false)
            throw new \Exception('Cannot connect to Gmail: ' . imap_last_error());
    }


    public function saveAttachmentsTo()
    {

        $emails = imap_search($this->connection, 'FROM forallthings');

        /* if emails are returned, cycle through each... */
        if ($emails) {

            /* begin output var */
            $output = '';

            /* put the newest emails on top */
            rsort($emails);

            foreach ($emails as $email_number) {

                /* get information specific to this email */
//                $overview = imap_fetch_overview($inbox, $email_number, 0);
//                $message = imap_fetchbody($inbox, $email_number, 2);
                $structure = imap_fetchstructure($this->connection, $email_number);

                $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($this->connection, $email_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']);
                            }
                        }
                    }

                    CustomVarDamp::dumpAndDie($attachments);

                    if (count($attachments) != 0) {


                        foreach ($attachments as $at) {

                            if ($at['is_attachment'] == 1) {
                                //die(__DIR__);
                                file_put_contents('test.csv', $at['attachment']);

                            }
                        }

                    }

                }

                // echo $output;
            }
            /* close the connection */
            imap_close($this->connection);
        }
    }
}