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

📄 mimepart.php

📁 This is the script which used on 10minutemail.com for temporary email.
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        // Assign stuff to member variables        $this->_encoded  = array();        $this->_headers  = $headers;        $this->_body     = $body;    }    /**     * encode()     *     * Encodes and returns the email. Also stores     * it in the encoded member variable     *     * @return An associative array containing two elements,     *         body and headers. The headers element is itself     *         an indexed array.     * @access public     */    function encode()    {        $encoded =& $this->_encoded;        if (count($this->_subparts)) {            srand((double)microtime()*1000000);            $boundary = '=_' . md5(rand() . microtime());            $this->_headers['Content-Type'] .= ';' . MAIL_MIMEPART_CRLF . "\t" . 'boundary="' . $boundary . '"';            // Add body parts to $subparts            for ($i = 0; $i < count($this->_subparts); $i++) {                $headers = array();                $tmp = $this->_subparts[$i]->encode();                foreach ($tmp['headers'] as $key => $value) {                    $headers[] = $key . ': ' . $value;                }                $subparts[] = implode(MAIL_MIMEPART_CRLF, $headers) . MAIL_MIMEPART_CRLF . MAIL_MIMEPART_CRLF . $tmp['body'] . MAIL_MIMEPART_CRLF;            }            $encoded['body'] = '--' . $boundary . MAIL_MIMEPART_CRLF .                                rtrim(implode('--' . $boundary . MAIL_MIMEPART_CRLF , $subparts), MAIL_MIMEPART_CRLF) . MAIL_MIMEPART_CRLF .                                '--' . $boundary.'--' . MAIL_MIMEPART_CRLF;        } else {            $encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding);        }        // Add headers to $encoded        $encoded['headers'] =& $this->_headers;        return $encoded;    }    /**     * &addSubPart()     *     * Adds a subpart to current mime part and returns     * a reference to it     *     * @param $body   The body of the subpart, if any.     * @param $params The parameters for the subpart, same     *                as the $params argument for constructor.     * @return A reference to the part you just added. It is     *         crucial if using multipart/* in your subparts that     *         you use =& in your script when calling this function,     *         otherwise you will not be able to add further subparts.     * @access public     */    function &addSubPart($body, $params)    {        $this->_subparts[] = new Mail_mimePart($body, $params);        return $this->_subparts[count($this->_subparts) - 1];    }    /**     * _getEncodedData()     *     * Returns encoded data based upon encoding passed to it     *     * @param $data     The data to encode.     * @param $encoding The encoding type to use, 7bit, base64,     *                  or quoted-printable.     * @access private     */    function _getEncodedData($data, $encoding)    {        switch ($encoding) {            case '8bit':            case '7bit':                return $data;                break;            case 'quoted-printable':                return $this->_quotedPrintableEncode($data);                break;            case 'base64':                return rtrim(chunk_split(base64_encode($data), 76, MAIL_MIMEPART_CRLF));                break;            default:                return $data;        }    }    /**     * quotedPrintableEncode()     *     * Encodes data to quoted-printable standard.     *     * @param $input    The data to encode     * @param $line_max Optional max line length. Should     *                  not be more than 76 chars     *     * @access private     */    function _quotedPrintableEncode($input , $line_max = 76)    {        $lines  = preg_split("/\r?\n/", $input);        $eol    = MAIL_MIMEPART_CRLF;        $escape = '=';        $output = '';        while (list(, $line) = each($lines)) {            $line    = preg_split('||', $line, -1, PREG_SPLIT_NO_EMPTY);            $linlen     = count($line);            $newline = '';            for ($i = 0; $i < $linlen; $i++) {                $char = $line[$i];                $dec  = ord($char);                if (($dec == 32) AND ($i == ($linlen - 1))) {    // convert space at eol only                    $char = '=20';                } elseif (($dec == 9) AND ($i == ($linlen - 1))) {  // convert tab at eol only                    $char = '=09';                } elseif ($dec == 9) {                    ; // Do nothing if a tab.                } elseif (($dec == 61) OR ($dec < 32 ) OR ($dec > 126)) {                    $char = $escape . strtoupper(sprintf('%02s', dechex($dec)));                } elseif (($dec == 46) AND ($newline == '')) {                    //Bug #9722: convert full-stop at bol                    //Some Windows servers need this, won't break anything (cipri)                    $char = '=2E';                }                if ((strlen($newline) + strlen($char)) >= $line_max) {        // MAIL_MIMEPART_CRLF is not counted                    $output  .= $newline . $escape . $eol;                    // soft line break; " =\r\n" is okay                    $newline  = '';                }                $newline .= $char;            } // end of for            $output .= $newline . $eol;        }        $output = substr($output, 0, -1 * strlen($eol)); // Don't want last crlf        return $output;    }    /**     * _buildHeaderParam()     *     * Encodes the paramater of a header.     *     * @param $name         The name of the header-parameter     * @param $value        The value of the paramter     * @param $charset      The characterset of $value     * @param $language     The language used in $value     * @param $maxLength    The maximum length of a line. Defauls to 75     *     * @access private     */    function _buildHeaderParam($name, $value, $charset=NULL, $language=NULL, $maxLength=75)    {        //If we find chars to encode, or if charset or language        //is not any of the defaults, we need to encode the value.        $shouldEncode = 0;        $secondAsterisk = '';        if (preg_match('#([\x80-\xFF]){1}#', $value)) {            $shouldEncode = 1;        } elseif ($charset && (strtolower($charset) != 'us-ascii')) {            $shouldEncode = 1;        } elseif ($language && ($language != 'en' && $language != 'en-us')) {            $shouldEncode = 1;        }        if ($shouldEncode) {            $search  = array('%',   ' ',   "\t");            $replace = array('%25', '%20', '%09');            $encValue = str_replace($search, $replace, $value);            $encValue = preg_replace('#([\x80-\xFF])#e', '"%" . strtoupper(dechex(ord("\1")))', $encValue);            $value = "$charset'$language'$encValue";            $secondAsterisk = '*';        }        $header = " {$name}{$secondAsterisk}=\"{$value}\"; ";        if (strlen($header) <= $maxLength) {            return $header;        }        $preLength = strlen(" {$name}*0{$secondAsterisk}=\"");        $sufLength = strlen("\";");        $maxLength = MAX(16, $maxLength - $preLength - $sufLength - 2);        $maxLengthReg = "|(.{0,$maxLength}[^\%][^\%])|";        $headers = array();        $headCount = 0;        while ($value) {            $matches = array();            $found = preg_match($maxLengthReg, $value, $matches);            if ($found) {                $headers[] = " {$name}*{$headCount}{$secondAsterisk}=\"{$matches[0]}\"";                $value = substr($value, strlen($matches[0]));            } else {                $headers[] = " {$name}*{$headCount}{$secondAsterisk}=\"{$value}\"";                $value = "";            }            $headCount++;        }        $headers = implode(MAIL_MIMEPART_CRLF, $headers) . ';';        return $headers;    }} // End of class

⌨️ 快捷键说明

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