Расшифровка электронной почты не работает в Zend Mail - PullRequest
0 голосов
/ 20 января 2012

У меня есть скрипт, который обращается к указанному письму и получает почту.$temp->getContent() повторяет следующее ..

----boundary_2710_edfb8b44-71c8-49ff-a8cb-88c83382c4ee 
Content-Type: multipart/alternative; 
boundary=--boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750 --boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: base64 
PGZvcm0gbWV0aG9k.........this part is base64 encoded and it works fine if i copy and decode it separately.......AgICAgICAgICAgDQoNCjwvZm9ybT4= 
----boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750-- ----boundary_2710_edfb8b44-71c8-49ff-a8cb-88c83382c4ee 
Content-Type: multipart/mixed; boundary=--boundary_2711_eca4cfc3-fc62-43d6-b9fb-e5295abbfbe8 ----boundary_2711_eca4cfc3-fc62-43d6-b9fb-e5295abbfbe8 Content-Type: application/pdf; 
name=redBusTicket.pdf 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment Content-ID: JVBERi0xLjIgCiXi48/TIAoxIDAgb2JqIAo8PCAKL1R5cGUgL0NhdGFsb2cgCi9QYWdlcyAy IDAgUiAKL1BhZ2VNb2RlIC9Vc2VOb25lIAovVmlld2VyUHJlZ

Между этим контентом есть часть, закодированная в base64, и она работает нормально, если я копирую и декодирую ее отдельно.Также есть вложение в почте.Как я могу получить прикрепленный файл.Ниже мой код.когда я использую base64_decode напрямую, я не получаю вывод ... просто пустую страницу ..

$storage = new Zend_Mail_Storage_Imap($imap);
$temp = $storage->getMessage($_GET['mailid']);
echo base64_decode($temp->getContent());

документация на веб-сайте Zend не очень хорошая.Нужна помощь !!

Ответы [ 2 ]

3 голосов
/ 01 ноября 2012

У меня хорошо работает:

foreach ($mail as $message) {

    $content = null;      
    foreach (new RecursiveIteratorIterator($message) as $part) {
        if (strtok($part->contentType, ';') == 'text/plain') {
            $content = $part;
            break;
        }
    }

    if ($content) {
        echo "\n encode: " . $content->contentTransferEncoding;        
        echo "\n date: " . $message->date;
        echo "\n subject: \n" . iconv_mime_decode($message->subject, 0, 'UTF-8');
        echo "\n plain text part: \n" . mb_convert_encoding(base64_decode($content), 'UTF-8', 'KOI8-R');
    }

}
2 голосов
/ 20 января 2012

У меня есть что-то вроде этого, чтобы получить содержимое base_64 из электронного письма. Попробуйте отфильтровать то, что вам не нужно.

if ($email->isMultipart() && $partsCount){

    for($i = 1; $i < $email->countParts() +1; $i++) {
        $part = $email->getPart($i);
        $headers = $part->getHeaders();
        if (
            array_key_exists('content-description', $headers)
             || array_key_exists('content-disposition', $headers)

        ){
            if (array_key_exists('content-description', $headers)) {
                $att = $part->getContent();
                $filepath = utf8_encode(DATA_PATH . '/' . $part->getHeader('content-description'));
                if (is_file($filepath)) {
                    unlink($filepath); // deletes previous files with same name
                }
                $file = fopen($filepath, "w");
                fwrite($file, base64_decode($att));
                fclose($file);
                $attachments[] = $filepath;
            } 
        }

    }
}
...