G
G
game8022016-10-29 20:54:10
PHP
game802, 2016-10-29 20:54:10

How to decode files from base64 to utf-8?

Good afternoon dear experts. There is this code:

$server = '{imap.hostingname.ru}';
$username = '[email protected]';
$password = 'password';

function getFileExtension($fileName) {
   $parts = explode(".",$fileName);
   return $parts[count($parts)-1];
}

$imap = imap_open($server, $username, $password) or die("imap connection error");
$message_count = imap_num_msg($imap);

for ($m = 1; $m <= $message_count; ++$m) {
    $header = imap_header($imap, $m);
    $email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
    $email[$m]['fromaddress'] = $header->from[0]->personal;
    $email[$m]['to'] = $header->to[0]->mailbox;
    $email[$m]['subject'] = $header->subject;
    $email[$m]['message_id'] = $header->message_id;
    $email[$m]['date'] = $header->udate;

    $from = $email[$m]['fromaddress'];
    $from_email = $email[$m]['from'];
    $to = $email[$m]['to'];
    $subject = $email[$m]['subject'];

    $structure = imap_fetchstructure($imap, $m);

    $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($imap, $m, $i+1);
                if($structure->parts[$i]->encoding == 3) {
                    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                }
                elseif($structure->parts[$i]->encoding == 4) {
                    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                }
            }
        }
    }

    foreach ($attachments as $key => $attachment) {
        $name = $attachment['name'];
        $contents = $attachment['attachment'];

        $resp = imap_utf8(trim($name));

        if(preg_match("/=\?/", $resp))
            $resp = iconv_mime_decode($name, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "ISO-8859-15");

        if(json_encode($resp) == 'null')
            $resp = utf8_encode($resp);

        file_put_contents($resp, $contents);
        echo $resp;
    }

}

imap_close($imap);

?>

It does not decode some files, example:
jQzUs.png
How to deal with this problem? Thank you!
And can you tell me how to make it download only certain files, with the .doc extension, for example.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
dmitriy, 2016-10-30
@game802

in fact, I didn’t find any normal way to receive letters, but I have my own library that works on the basis of eden / mail, if necessary, I will place it in public access

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question