⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mimedecode.php

📁 This is the script which used on 10minutemail.com for temporary email.
💻 PHP
📖 第 1 页 / 共 3 页
字号:
     * @param  string Input body to decode     * @param  string Encoding type to use.     * @return string Decoded body     * @access private     */    function _decodeBody($input, $encoding = '7bit')    {        switch (strtolower($encoding)) {            case '7bit':                return $input;                break;            case 'quoted-printable':                return $this->_quotedPrintableDecode($input);                break;            case 'base64':                return base64_decode($input);                break;            default:                return $input;        }    }    /**     * Given a quoted-printable string, this     * function will decode and return it.     *     * @param  string Input body to decode     * @return string Decoded body     * @access private     */    function _quotedPrintableDecode($input)    {        // Remove soft line breaks        $input = preg_replace("/=\r?\n/", '', $input);        // Replace encoded characters		$input = preg_replace('/=([a-f0-9]{2})/ie', "chr(hexdec('\\1'))", $input);        return $input;    }    /**     * Checks the input for uuencoded files and returns     * an array of them. Can be called statically, eg:     *     * $files =& Mail_mimeDecode::uudecode($some_text);     *     * It will check for the begin 666 ... end syntax     * however and won't just blindly decode whatever you     * pass it.     *     * @param  string Input body to look for attahcments in     * @return array  Decoded bodies, filenames and permissions     * @access public     * @author Unknown     */    function &uudecode($input)    {        // Find all uuencoded sections        preg_match_all("/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us", $input, $matches);        for ($j = 0; $j < count($matches[3]); $j++) {            $str      = $matches[3][$j];            $filename = $matches[2][$j];            $fileperm = $matches[1][$j];            $file = '';            $str = preg_split("/\r?\n/", trim($str));            $strlen = count($str);            for ($i = 0; $i < $strlen; $i++) {                $pos = 1;                $d = 0;                $len=(int)(((ord(substr($str[$i],0,1)) -32) - ' ') & 077);                while (($d + 3 <= $len) AND ($pos + 4 <= strlen($str[$i]))) {                    $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);                    $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);                    $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20);                    $c3 = (ord(substr($str[$i],$pos+3,1)) ^ 0x20);                    $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));                    $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2));                    $file .= chr(((($c2 - ' ') & 077) << 6) |  (($c3 - ' ') & 077));                    $pos += 4;                    $d += 3;                }                if (($d + 2 <= $len) && ($pos + 3 <= strlen($str[$i]))) {                    $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);                    $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);                    $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20);                    $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));                    $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2));                    $pos += 3;                    $d += 2;                }                if (($d + 1 <= $len) && ($pos + 2 <= strlen($str[$i]))) {                    $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);                    $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);                    $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));                }            }            $files[] = array('filename' => $filename, 'fileperm' => $fileperm, 'filedata' => $file);        }        return $files;    }    /**     * getSendArray() returns the arguments required for Mail::send()     * used to build the arguments for a mail::send() call      *     * Usage:     * $mailtext = Full email (for example generated by a template)     * $decoder = new Mail_mimeDecode($mailtext);     * $parts =  $decoder->getSendArray();     * if (!PEAR::isError($parts) {     *     list($recipents,$headers,$body) = $parts;     *     $mail = Mail::factory('smtp');     *     $mail->send($recipents,$headers,$body);     * } else {     *     echo $parts->message;     * }     * @return mixed   array of recipeint, headers,body or Pear_Error     * @access public     * @author Alan Knowles <alan@akbkhome.com>     */    function getSendArray()    {        // prevent warning if this is not set        $this->_decode_headers = FALSE;        $headerlist =$this->_parseHeaders($this->_header);        $to = "";        if (!$headerlist) {            return $this->raiseError("Message did not contain headers");        }        foreach($headerlist as $item) {            $header[$item['name']] = $item['value'];            switch (strtolower($item['name'])) {                case "to":                case "cc":                case "bcc":                    $to = ",".$item['value'];                default:                   break;            }        }        if ($to == "") {            return $this->raiseError("Message did not contain any recipents");        }        $to = substr($to,1);        return array($to,$header,$this->_body);    }     /**     * Returns a xml copy of the output of     * Mail_mimeDecode::decode. Pass the output in as the     * argument. This function can be called statically. Eg:     *     * $output = $obj->decode();     * $xml    = Mail_mimeDecode::getXML($output);     *     * The DTD used for this should have been in the package. Or     * alternatively you can get it from cvs, or here:     * http://www.phpguru.org/xmail/xmail.dtd.     *     * @param  object Input to convert to xml. This should be the     *                output of the Mail_mimeDecode::decode function     * @return string XML version of input     * @access public     */    function getXML($input)    {        $crlf    =  "\r\n";        $output  = '<?xml version=\'1.0\'?>' . $crlf .                   '<!DOCTYPE email SYSTEM "http://www.phpguru.org/xmail/xmail.dtd">' . $crlf .                   '<email>' . $crlf .                   Mail_mimeDecode::_getXML($input) .                   '</email>';        return $output;    }    /**     * Function that does the actual conversion to xml. Does a single     * mimepart at a time.     *     * @param  object  Input to convert to xml. This is a mimepart object.     *                 It may or may not contain subparts.     * @param  integer Number of tabs to indent     * @return string  XML version of input     * @access private     */    function _getXML($input, $indent = 1)    {        $htab    =  "\t";        $crlf    =  "\r\n";        $output  =  '';        $headers = @(array)$input->headers;        foreach ($headers as $hdr_name => $hdr_value) {            // Multiple headers with this name            if (is_array($headers[$hdr_name])) {                for ($i = 0; $i < count($hdr_value); $i++) {                    $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value[$i], $indent);                }            // Only one header of this sort            } else {                $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value, $indent);            }        }        if (!empty($input->parts)) {            for ($i = 0; $i < count($input->parts); $i++) {                $output .= $crlf . str_repeat($htab, $indent) . '<mimepart>' . $crlf .                           Mail_mimeDecode::_getXML($input->parts[$i], $indent+1) .                           str_repeat($htab, $indent) . '</mimepart>' . $crlf;            }        } elseif (isset($input->body)) {            $output .= $crlf . str_repeat($htab, $indent) . '<body><![CDATA[' .                       $input->body . ']]></body>' . $crlf;        }        return $output;    }    /**     * Helper function to _getXML(). Returns xml of a header.     *     * @param  string  Name of header     * @param  string  Value of header     * @param  integer Number of tabs to indent     * @return string  XML version of input     * @access private     */    function _getXML_helper($hdr_name, $hdr_value, $indent)    {        $htab   = "\t";        $crlf   = "\r\n";        $return = '';        $new_hdr_value = ($hdr_name != 'received') ? Mail_mimeDecode::_parseHeaderValue($hdr_value) : array('value' => $hdr_value);        $new_hdr_name  = str_replace(' ', '-', ucwords(str_replace('-', ' ', $hdr_name)));        // Sort out any parameters        if (!empty($new_hdr_value['other'])) {            foreach ($new_hdr_value['other'] as $paramname => $paramvalue) {                $params[] = str_repeat($htab, $indent) . $htab . '<parameter>' . $crlf .                            str_repeat($htab, $indent) . $htab . $htab . '<paramname>' . htmlspecialchars($paramname) . '</paramname>' . $crlf .                            str_repeat($htab, $indent) . $htab . $htab . '<paramvalue>' . htmlspecialchars($paramvalue) . '</paramvalue>' . $crlf .                            str_repeat($htab, $indent) . $htab . '</parameter>' . $crlf;            }            $params = implode('', $params);        } else {            $params = '';        }        $return = str_repeat($htab, $indent) . '<header>' . $crlf .                  str_repeat($htab, $indent) . $htab . '<headername>' . htmlspecialchars($new_hdr_name) . '</headername>' . $crlf .                  str_repeat($htab, $indent) . $htab . '<headervalue>' . htmlspecialchars($new_hdr_value['value']) . '</headervalue>' . $crlf .                  $params .                  str_repeat($htab, $indent) . '</header>' . $crlf;        return $return;    }} // End of class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -