문제

이 코드가 있습니다. 그것은 온 것입니다 Zend Reading Mail 예시.

$message = $mail->getMessage(1);

// output first text/plain part
$foundPart = null;
foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) {
    try {
        if (strtok($part->contentType, ';') == 'text/plain') {
            $foundPart = $part;
            break;
        }
    } catch (Zend_Mail_Exception $e) {
        // ignore
    }
}
if (!$foundPart) {
    echo 'no plain text part found';
} else {
    echo $foundPart->getContent();
}

내가 얻을 수있는 것은 메시지가 잘 작동합니다. 그러나 메시지를 읽을 수있는 것으로 해독하는 것은 작동하지 않습니다. 나는 Zend_mime, imap_mime 및 iconv를 운이없이 시도했습니다.

이것은 내가 얻는 것의 예입니다 $foundPart->getContent();

hall = f3 heim = far

"Halló Heimúr"라고 말해야합니다.

내가 원하는 것은 실제로 "푸시 버튼, 베이컨을받을 수있는"도서관입니다. 내 말은, 라이브러리를 POP3 전자 메일 상자에 가리키고 (인코딩 문제없이) 읽을 수있는 형태로 이메일과 첨부 파일로 이메일을 받고 싶습니다.

imap_mime_header_decode() 동일한 데이터가있는 배열을 제공합니다.
iconv_ mime_ decode() 동일합니다

누구든지 왜 이런 일이 일어나고 있는지 또는 내가 이것을 추상화 할 수있는 도서관 (PHP/Python 또는 Perl)

도움이 되었습니까?

해결책

이것은 Base64 인코딩 때문일 수 있습니다. zend_mail 문서는 ( '인코딩'아래) say라고 말합니다.

... 다른 모든 첨부 파일은 addAttachment () 호출에 다른 인코딩이 제공되지 않으면 나중에 MIME 부품 객체에 할당되지 않은 경우 Base64를 통해 인코딩됩니다.

다음과 같은 것을 시도하십시오.

echo base64_decode($foundPart->getContent());

또한 읽기 :http://framework.zend.com/manual/en/zend.mail.encoding.html

어떻게 든 도움이되기를 바랍니다.

다른 팁

전자 메일 읽기에 Zend_mail을 사용하는 방법을 배우면서 비슷한 문제를 해결했습니다. 인코딩 된 이메일을 해독하고 문자 세트를 변환하는 등 Zend_mail이 구현하지 않는 추가 논리를 추가해야합니다. 평범한 텍스트 부분을 찾은 후에 내가하는 일은 다음과 같습니다.

$content = $foundPart->getContent();

switch ($foundPart->contentTransferEncoding) {
    case 'base64':
        $content = base64_decode($content);
        break;
    case 'quoted-printable':
        $content = quoted_printable_decode($content);
        break;
}

//find the charset
preg_match('/charset="(.+)"$/', $foundPart->contentType, $matches);
$charset = $matches[1];

if ($charset == 'iso-8859-1') {
    $content = utf8_encode($content); //convert to utf8
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top