Warum nicht diese Nachricht korrekt dekodieren?
-
08-07-2019 - |
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)
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
}