php csv imap скачать

1

У меня возникли проблемы с загрузкой вложения электронной почты csv с помощью imap_open. Мне удается загрузить, но он вводит нечетные символы, это моя проблема. Исходный файл: Изображение 174551

Первоначально файл имеет полные строки при открытии с сервера электронной почты на моем Linux; Я имею в виду, что, например, строка заголовка находится в одной строке, когда я ее открываю. Теперь после загрузки это происходит: Изображение 174551

Это тот код, который у меня есть до сих пор:

    <?php
class ReadAttachment {
    function getdecodevalue($message,$coding) {
            switch($coding) {
                    case 0:
//                            I think I need to add somethin here.
                            break;
                    case 1:
                            $message = imap_8bit($message);
                            break;
                    case 2:
                            $message = imap_binary($message);
                            break;
                    case 3:
                    case 5:
                            $message=imap_base64($message);
                            break;
                    case 4:
                            $message = imap_qprint($message);
                            break;
            }
            return $message;
    }


    function getdata($host,$login,$password,$savedirpath,$subjectFilters,$delete_emails=false) {
            // make sure save path has trailing slash (/)
            $savedirpath = str_replace('\\', '/', $savedirpath);
            if (substr($savedirpath, strlen($savedirpath) - 1) != '/') {
                    $savedirpath .= '/';
            }       
            $mbox = imap_open ($host, $login, $password) or die("can't connect: " . imap_last_error());
            $message = array();
            $message["attachment"]["type"][0] = "text";
            $message["attachment"]["type"][1] = "multipart";
            $message["attachment"]["type"][2] = "message";
            $message["attachment"]["type"][3] = "application";
            $message["attachment"]["type"][4] = "audio";
            $message["attachment"]["type"][5] = "image";
            $message["attachment"]["type"][6] = "video";
            $message["attachment"]["type"][7] = "other";
            $filepath = array(array());
            $ki = 0;
            foreach ($subjectFilters as $subjectFilter){
                for ($jk = 1; $jk <= imap_num_msg($mbox); $jk++) {
                        $structure = imap_fetchstructure($mbox, $jk , FT_UID);
//                        var_dump($structure);
                        $parts = $structure->parts;
//                        var_dump($parts);
                        $fpos=2;
                        for($i = 1; $i < count($parts); $i++) {
                                $message["pid"][$i] = ($i);
                                $part = $parts[$i];
                                if(isset($part->disposition)){
                                    if($part->disposition == "attachment" || $part->disposition == "ATTACHMENT") {
                                            $message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
                                            $message["subtype"][$i] = strtolower($part->subtype);
                                            $ext=$part->subtype;
                                            $params = $part->dparameters;
                                            $filename=$part->dparameters[0]->value;
                                            if (self::endsWith($filename, '.csv')){
                                                $mege="";
                                                $data="";
                                                $mege = imap_fetchbody($mbox,$jk,$fpos); 
                                                //subject path
                                                $headerMail = imap_headerinfo($mbox, $jk);
                                                //var_dump($headerMail);
                                                $filename="$filename";
                                                $currentSubject = $headerMail->subject;
                                                $currentSender = $headerMail->from[0]->mailbox . "@" . $headerMail->from[0]->host;;
                                                if(strpos($currentSubject, $subjectFilter)){
                                                    $filepath[$ki][0] = $savedirpath.$filename;
                                                    $filepath[$ki][1] = $subjectFilter;
                                                    $filepath[$ki][2] = $currentSender;
                                                } else {
                                                    break;
                                                }
                                                $ki+=1;
                                                echo $savedirpath.$filename." -".$ki."<BR>\n";
                                                $fp=fopen($savedirpath.$filename,'w');
                                                echo $part->type.PHP_EOL;
                                                $data=$this->getdecodevalue($mege,$part->type); 
                                                fputs($fp,$data);
                                                fclose($fp);
                                                $fpos+=1;
                                            }
                                    }
                                }
                        }
                        if ($delete_emails) {
                                // imap_delete tags a message for deletion
                                imap_delete($mbox,$jk);
                        }
                }
            }
            // imap_expunge deletes all tagged messages
            if ($delete_emails) {
                    imap_expunge($mbox);
            }
            imap_close($mbox);
            return $filepath;
    }

    private function endsWith($haystack, $needle) {
        // search forward starting from end minus needle length characters
        return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
    }
}

Изменить: Вложения создаются в Windows, и я загружаюсь в Linux.

Edit2 это в функции getdecodevalue:

$message = utf8_encode($message);

а также это:

$message = iconv('UTF-8', 'windows-1252', $message);

а также это:

                    case 0:
//                            I think I need to add somethin here.
                            $message = iconv('UTF-8', 'windows-1252', $message);
                            $message = utf8_encode($message);

                            break;
                    case 1:

Я делаю это не в том месте?

Edit3

string(3526) "=3DEF=3DBB=3DBFHP Web Jetadmin Report

Report Type:,Supply Usage - Details
Date Created:,6/30/2015 11:00 AM
Group By:,"Device (Sort: Asset Number (Ascending), Serial Number =3D
(Ascending))"
Sort By:,Supply (Ascending)
Usage period:,1 year(s)
Installation state:,Active Only
Device Group:,North Office (subgroups included)
Devices:,3

Device Model,IP Hostname,IP Address,Hardware Address (MAC),Port =3D
(Any),Asset Number,Black Average Coverage,Black Cartridge Low =3D
Threshold,Black Cartridge Very Low Action,Engine Cycle Count,Serial =3D
Number,Status,Supply,Supply Part Number,Supply Status,Supply Serial =3D
Number,Supply Installation Date,Last Collection Date,Initial Supply =3D
Level (%),Estimated Supply Level (%),(%) Supply Consumption,Average =3D
Supply Coverage %,Estimated Printed,Estimated Remaining,Supply =3D
Manufacturing Date,
RICOH Aficio MP 2500,RNP1D5740,10.0.2.201,0026731D5740,<No Value>,<Not =3D
supported>,<Not supported>,<Not supported>,<Not =3D
supported>,103297,M4411400291,Ready,--,--,--,--,--,--,--,--,--,--,--,--,-=
=3D
-,
HP LaserJet 4250,NPI16684C,10.0.2.11,00215AE3BB8F,1,1201269,4.00,<Not =3D
supported>,<Not supported>,70520,CNRXK82770,Power Save On,Black =3D
Toner,Q5942X,Genuine HP =3D
Installed,53386,6/18/2015,6/30/2015,98%,97%,1%,24.4%,41,"19,273",1/19/201=
=3D
5,
HP LaserJet 4250,NPI16684C,10.0.2.11,00215AE3BB8F,1,1201269,4.00,<Not =3D
supported>,<Not supported>,70520,CNRXK82770,Power Save On,Maintenance =3D
Kit (Replaced by Supplies),Q5421A; =3D
Q5422A,Unknown,,--,6/30/2015,71%,69%,2%,5.9%,"3,818","154,529",--,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Black =3D
Toner,CE260X,Genuine HP =3D
Installed,16990983,5/6/2009,6/30/2015,99%,99%,--%,--,58,--,11/19/2014,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Cyan =3D
Toner,CE261A,Genuine HP =3D
Installed,184624642,6/24/2015,6/30/2015,44%,44%,--%,--,363,"5,507",4/10/2=
=3D
013,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Fuser =3D
(Replaced by Supplies),CE246A; =3D
CE247A,Unknown,,--,6/30/2015,94%,25%,69%,0.0%,"97,366","37,100",--,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Magenta =3D
Toner,CE263A,Genuine HP =3D
Installed,17048160,6/24/2015,6/30/2015,53%,52%,1%,0.0%,363,"5,860",7/12/2=
=3D
013,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Toner =3D
Collection Unit (Replaced by =3D
Supplies),CE265A,Unknown,,--,6/30/2015,<OK>,<OK>,<Unknown>,--,"97,366",--=
=3D
,--,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Transfer =3D
Kit (Replaced by =3D
Supplies),CE249A,Unknown,,--,6/30/2015,97%,31%,66%,0.0%,"97,366","46,400"=
=3D
,--,
HP Color LaserJet CP4520 =3D
Series,NPI029CBF,10.0.2.18,009C02029CBF,1,1201270,<Not =3D
supported>,12,<Not supported>,250594,JPBCD2R0ZW,Power Save On,Yellow =3D
Toner,CE262A,Genuine HP =3D
Installed,184623597,6/24/2015,6/30/2015,19%,18%,1%,0.0%,363,"11,200",12/8=
=3D
/2011,
"

измените размер окна: Изображение 174551

Теги:
csv
imap

1 ответ

0

utf8_encode все, что вы проходите, имеет аналогичную проблему;

https://secure.php.net/manual/en/function.utf8-encode.php

Если это не работает, попробуйте это:

iconv('UTF-8', 'windows-1252', $string);
  • 0
    Привет, пожалуйста, проверьте Edit2.
  • 0
    не могли бы вы скопировать / вставить результат linux в исходный вопрос, это похоже на проблему с переносом слов
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню