2012-03-24 17 views
1

Ich versuche, Mails mit Zend_Mail_Storage_Imap zu lesen. Hier ist ein Teil meines Codes:So lesen Sie Akzente mit Zend_Mail_Storage_Imap

$mail = new Zend_Mail_Storage_Imap(
     array( 'host' =>'imap.gmail.com', 
       'ssl' =>true, 
       'port'=>993, 
       'folder'=>'inbox', 
       'user' => '***', 
       'password' => '***' 
      ) 
     ); 


    foreach ($mail as $k => $message) { 
      $msg = $mail->getMessage($k); 
      echo $msg->getContent(); 
    } 

Alles funktioniert gut, außer dem Akzentformat. Ich habe Dinge wie diese:

int = C3 = A9gration für intégration

S = C3 = A0rl * für sàrl

Kann mir jemand helfen?

Antwort

1

Werfen Sie einen Blick in die „getText()“ Methode hier: http://wiip.fr/content/zend-mail-storage-imap

Der Text in französisch, aber nicht die Mühe, und nur das, was Sie in diesem getText Methode benötigen. Grundsätzlich müssen Sie die Codierung der E-Mail & decodieren.

Sie können auch einen Blick dort haben: Email decoding doesn't work in zend mail

+0

Ich habe versucht, Ihre Klasse zu verwenden. Es macht mich zu einer Ausnahme. $ contentTransfertEncoding ist leer ... – Ced

+0

Was ist mit der 2. Lösung? Der 1. kann veraltet sein (es ist 3 Jahre alt ...) – haltabush

2
utf8_decode(quoted_printable_decode($part->getContent())) 
+0

sollte diese Antwort akzeptiert werden – Andreah

0

hier ist es eine mögliche Lösung, wenn Sie utf-8 interne Codierung verwenden.

/** 
* retrieves message content 
* @param Zend_Mail_Message|Zend_Mail_Part $oMessage 
* @return string returns message content as utf-8 string from message object 
*/ 
public static function contentDecoder ($oMessage, $bVerbose = false) { 
    mb_internal_encoding("UTF-8"); 
    echo ($bVerbose)?("\tultimateContentDecode {\n"):('');  
    if($oMessage->headerExists('content-type')) { 
     echo ($bVerbose)?("\t\t" . $oMessage->contentType . "\n"):(''); 
     preg_match('/^([a-z\/]+)(?:;\s+format=[a-zA-Z0-9-]+)?(?:;\s+charset=([a-zA-Z0-9-]+))?/i', 
      str_replace('"', '', $oMessage->contentType), $matches); 
     list(,$sMimeType,$sEncoding) = $matches; 
     echo ($bVerbose)?("\t\tType of this part is {$sMimeType}, {$sEncoding}\n"):(''); 
    } else { 
     $sContent = $oMessage->getContent(); 
     $sMimeType = 'text/plain'; 
     $sEncoding = mb_detect_encoding($sContent, self::$_sEncDetectOrder); 
     echo ($bVerbose)?("\t\tUnknow content type. text/plain; charset={$sEncoding}\n"):(''); 
    } 
    $sEncoding = strtoupper($sEncoding); 
    if($oMessage->headerExists('content-transfer-encoding')) { 
     $sQuoting = $oMessage->contentTransferEncoding; 
     echo ($bVerbose)?("\t\tContent-Transfer-Encoding: " . $oMessage->contentTransferEncoding . "\n"):(''); 
    } else { 
     $sQuoting = ''; 
    } 
    $sContent = $oMessage->getContent(); 
    switch ($sQuoting) { 
     case 'quoted-printable': 
     case '7bit': 
      $sContent = quoted_printable_decode($sContent); 
      break; 
     case 'base64': 
      $sContent = base64_decode($sContent); 
      break; 
    } 
    if ($sEncoding != 'UTF-8') { 
     echo ($bVerbose)?("\t\tConvert encoding: {$sEncoding} -> UTF-8 \n"):(''); 
     $sContent = mb_convert_encoding($sContent, 'UTF-8', $sEncoding); 
    } 
    $sContent = trim(preg_replace(
      array('/^\s+/m', '/\s+$/m', '/[ \t]+/'), 
      array('', '', ' '), $sContent)); 
    echo ($bVerbose)?("--\n{$sContent}\n--"):(''); 
    echo ($bVerbose)?("\t}\n"):(''); 
    return $sContent; 
}