Как читать акценты, используя Zend_Mail_Storage_Imap - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь читать почту с 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();
    }

Все работает хорошо, кроме формата акцента. У меня есть такие вещи:

int = C3 = A9 интеграция для интеграции

S = C3 = A0rl * для sàrl

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

2 голосов
/ 25 марта 2012
utf8_decode( quoted_printable_decode( $part->getContent() ))
1 голос
/ 24 марта 2012

Взгляните на метод getText () здесь: http://wiip.fr/content/zend-mail-storage-imap

Текст написан на французском языке, но не беспокойтесь и принимайте только то, что вам нужно, в этот метод getText. В основном вам нужно определить кодировку письма и расшифровать его.

Вы также можете посмотреть там: Расшифровка электронной почты не работает в Zend Mail

0 голосов
/ 26 января 2013

здесь возможное решение, если вы используете внутреннюю кодировку utf-8.

/**
 * 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...