Neden bu posta iletisi doğru çözmek değil mi?

2 Cevap php

Bu kodu vardır. Bu Zend Reading Mail örnek bulunuyor.

$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();
}

Ne alabilirim çalışıyor mesajıdır. Ama okunabilir bir şey içine mesajı çözmek için çalışıyor çalışmıyor. Ben hayır şans ile Zend_Mime, imap_mime ve iconv denedim.

Bu benim $foundPart->getContent(); ile ne olsun bir örnek

Hall = F3 heim = FAR

Bu "Halló heimúr" demeliyim

Ne isteyeyim ben olabilir sadece bazı kütüphane olduğunu pratikte "düğmesine basın, pastırma alıyorsunuz". Ne demek ben sadece bir POP3 e-posta kutusuna kitaplık gelin ve (herhangi bir kodlama sorunları olmadan) okunabilir biçimde e-posta ve ekleri almak istiyorum, bir.

imap_mime_header_decode() Gives me an array with the same data.
iconv_ mime_ decode() Does the same

Herkes bu neden oluyor herhangi bir fikir ya da olabilir sadece soyut Bu uzakta (PHP / Python veya Perl), bazı kütüphane var mı

2 Cevap

Bunun nedeni base64 kodlama olabilir. Zend_Mail docs ('kodlama' altında) demek:

...All other attachments are encoded via base64 if no other encoding is given in the addAttachment() call or assigned to the MIME part object later.

Böyle bir şey deneyin:

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

Also, read: http://framework.zend.com/manual/en/zend.mail.encoding.html

Şekilde yardımcı olduğunu umuyoruz.

E-postaları okumak için Zend_Mail nasıl kullanılacağını öğrenme sırasında bazı benzer sorunlar koştu. Bu tür e-postaları kodlanmış çözme ve karakter kümesi dönüştürme gibi Zend_Mail uygulamıyor ek mantığı eklemek gerekir. Burada düz metin kısmını bulduktan sonra ne yapıyorum:

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