【问题标题】:How to read accents using Zend_Mail_Storage_Imap如何使用 Zend_Mail_Storage_Imap 读取重音符号
【发布时间】:2014-10-30 15:52:59
【问题描述】:

我正在尝试使用 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=A9gration 用于集成

S=C3=A0rl* 用于 sàrl

有人可以帮帮我吗?

【问题讨论】:

    标签: zend-framework email smtp


    【解决方案1】:
    utf8_decode( quoted_printable_decode( $part->getContent() ))
    

    【讨论】:

      【解决方案2】:

      在这里查看“getText()”方法: http://wiip.fr/content/zend-mail-storage-imap

      文本是法语,但不要打扰,只需将您需要的内容放入此 getText 方法。基本上您需要确定电子邮件的编码并对其进行解码。

      你也可以去那里看看:Email decoding doesn't work in zend mail

      【讨论】:

      • 我已尝试使用您的课程。它让我成为一个例外。 $contentTransfertEncoding 为空...
      • 第二个解决方案怎么样?第一个可能已经过时(它已经 3 岁了......)
      【解决方案3】:

      如果您使用 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 2016-01-03
        • 2019-02-05
        • 1970-01-01
        相关资源
        最近更新 更多