Domanda

Ho questo codice. Viene dall'esempio 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();
}

Quello che posso ottenere è il messaggio, che funziona benissimo. Ma provare a decodificare il messaggio in qualcosa di leggibile non funziona. Ho provato Zend_Mime, imap_mime e iconv senza fortuna.

Questo è un esempio di ciò che ottengo con $foundPart->getContent();

  

Hall = F3 heim = FAr

Dovrebbe essere indicato " Hall & # 243; heim & # 250; r "

Quello che vorrei è solo una libreria in cui potrei " pulsante, ricevere pancetta " in pratica. Voglio dire, voglio solo indirizzare la libreria verso una casella di posta elettronica POP3 e ottenere l'e-mail in forma leggibile (senza problemi di codifica) e gli allegati.

imap_mime_header_decode () Mi dà un array con gli stessi dati.
iconv_ mime_ decode () Fa lo stesso

Qualcuno ha idea del perché questo stia accadendo o di qualche libreria in cui posso semplicemente sottrarlo (PHP / Python o Perl)

È stato utile?

Soluzione

Ciò potrebbe essere dovuto alla codifica base64. I documenti di Zend_Mail dicono (sotto "codifica"):

  

... Tutti gli altri allegati sono codificati   tramite base64 se non è presente alcuna altra codifica   indicato nella chiamata addAttachment () o   assegnato all'oggetto parte MIME   più tardi.

Prova qualcosa del tipo:

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

Leggi anche: http://framework.zend.com/manual/en/zend. mail.encoding.html

Spero che abbia aiutato in qualche modo.

Altri suggerimenti

Ho riscontrato alcuni problemi simili durante l'apprendimento di come utilizzare Zend_Mail per leggere le e-mail. Dovrai aggiungere una logica aggiuntiva che Zend_Mail non implementa, come la decodifica delle email codificate e la conversione del set di caratteri. Ecco cosa sto facendo dopo aver trovato la parte in testo semplice:

$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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top