Frage

Ich habe diesen Code. Es ist aus dem Zend Lesen von Mail Beispiel.

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

Was kann ich bekommen, ist die Botschaft, die gut funktioniert. Doch der Versuch, die Nachricht in lesbar etwas zu entschlüsseln funktioniert nicht. Ich habe versucht, Zend_Mime, imap_mime und iconv ohne Glück.

Dies ist ein Beispiel dafür, was ich mit $foundPart->getContent(); bekommen

  

Halle = F3 Heimer = FAr

Es sollte "Halló HEIMUR" sagen

Was ich möchte, ist nur einige Bibliothek, wo ich „Knopf drücken, erhalten Speck“ könnte in der Praxis. Was ich meine ist, ich will nur die Bibliothek zu einer POP3-E-Mail-Box zeigen und die E-Mail in lesbarer Form (ohne Codierung Probleme) und die Anlagen erhalten.

imap_mime_header_decode() Gibt mir ein Array mit den gleichen Daten.
iconv_ mime_ decode() Hat das gleiche

Hat jemand eine Idee, warum dies geschieht oder eine Bibliothek, wo ich kann nur abstrakt dieses weg (PHP / Python oder Perl)

War es hilfreich?

Lösung

Dies könnte wegen der Base64-Codierung sein. Die Zend_Mail docs sagen (unter 'encoding'):

  

... Alle anderen Anhänge sind codierte   wenn keine andere Kodierung über Base64 ist   im addAttachment () -Aufruf gegeben oder   mit dem MIME Teil Objekt zugewiesen   später.

Versuchen Sie so etwas wie:

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

Lesen Sie auch: http://framework.zend.com/manual/en/zend. mail.encoding.html

Hope, die irgendwie geholfen.

Andere Tipps

Ich lief in einige ähnliche Probleme beim Lernen, wie Zend_Mail verwenden E-Mails zu lesen. Sie müssen zusätzliche Logik hinzufügen, die Zend_Mail nicht, wie Decodieren codierte E-Mails nicht implementiert, und den Zeichensatz zu konvertieren. Hier ist, was ich tue, nachdem den Klartextteil zu finden:

$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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top