php zend-framework email mime zend-mail

php - ¿Por qué este mensaje de correo no se decodifica correctamente?



zend-framework email (2)

Tengo este código. Es del ejemplo de 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(); }

Lo que puedo obtener es el mensaje, eso funciona bien. Pero tratar de decodificar el mensaje en algo legible no funciona. He intentado Zend_Mime, imap_mime e iconv sin suerte.

Este es un ejemplo de lo que obtengo con $foundPart->getContent();

Hall = F3 heim = FAr

Debería decir "Halló heimúr"

Lo que me gustaría es solo una biblioteca donde podría "presionar el botón, recibir tocino" en la práctica. Lo que quiero decir es que solo quiero apuntar la biblioteca a un buzón de correo POP3 y obtener el correo electrónico en forma legible (sin ningún problema de codificación) y los archivos adjuntos.

imap_mime_header_decode() me da una matriz con los mismos datos.
iconv_ mime_ decode() Hace lo mismo

¿Alguien tiene alguna idea de por qué está sucediendo esto o alguna biblioteca donde puedo abstraer esto (PHP / Python o Perl)?


Esto podría ser debido a la codificación base64. Los documentos de Zend_Mail dicen (bajo ''codificación''):

... Todos los demás archivos adjuntos se codifican a través de base64 si no se proporciona ninguna otra codificación en la llamada addAttachment () o se asigna al objeto de la parte MIME más tarde.

Pruebe algo como:

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

Además, lea: http://framework.zend.com/manual/en/zend.mail.encoding.html

Espero que haya ayudado de alguna manera.


Me encontré con algunos problemas similares mientras aprendía a usar Zend_Mail para leer correos electrónicos. Tendrá que agregar una lógica adicional que Zend_Mail no implementa, como decodificar correos electrónicos codificados y convertir el juego de caracteres. Esto es lo que estoy haciendo después de encontrar la parte de texto sin formato:

$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 }