roundcubemail/program/lib/Roundcube/rcube_message.php
function uu_decode(&$part)
    {
        // @TODO: messages may be huge, handle body via file
        $part->body = $this->get_part_body($part->mime_id);
        $parts      = array();
        $pid        = 0;

        // FIXME: line length is max.65?
        $uu_regexp_begin = '/begin [0-7]{3,4} ([^\r\n]+)\r?\n/s';
        $uu_regexp_end   = '/`\r?\nend((\r?\n)|($))/s';

        while (preg_match($uu_regexp_begin, $part->body, $matches, PREG_OFFSET_CAPTURE)) {
            $startpos = $matches[0][1];

            if (!preg_match($uu_regexp_end, $part->body, $m, PREG_OFFSET_CAPTURE, $startpos)) {
                break;
            }

            $endpos    = $m[0][1];
            $begin_len = strlen($matches[0][0]);
            $end_len   = strlen($m[0][0]);

            // extract attachment body
            $filebody = substr($part->body, $startpos + $begin_len, $endpos - $startpos - $begin_len - 1);
            $filebody = str_replace("\r\n", "\n", $filebody);

            // remove attachment body from the message body
            $part->body = substr_replace($part->body, '', $startpos, $endpos + $end_len - $startpos);
            // mark body as modified so it will not be cached by rcube_imap_cache
            $part->body_modified = true;

            // add attachments to the structure
            $uupart = new rcube_message_part;
            $uupart->filename = trim($matches[1][0]);
            $uupart->encoding = 'stream';
            $uupart->body     = convert_uudecode($filebody);
            $uupart->size     = strlen($uupart->body);
            $uupart->mime_id  = 'uu.' . $part->mime_id . '.' . $pid;

            $ctype = rcube_mime::file_content_type($uupart->body, $uupart->filename, 'application/octet-stream', true);
            $uupart->mimetype = $ctype;
            list($uupart->ctype_primary, $uupart->ctype_secondary) = explode('/', $ctype);

            $parts[] = $uupart;
            $pid++;
        }

        return $parts;
    }
function uu_decode(&$part)
    {
        // @TODO: messages may be huge, handle body via file
        $part->body = $this->get_part_body($part->mime_id);
        $parts      = array();
        $pid        = 0;

        // FIXME: line length is max.65?
        $uu_regexp_begin = '/begin [0-7]{3,4} ([^\r\n]+)\r?\n/s';
        $uu_regexp_end   = '/`\r?\nend((\r?\n)|($))/s';

        while (preg_match($uu_regexp_begin, $part->body, $matches, PREG_OFFSET_CAPTURE)) {
            $startpos = $matches[0][1];

            if (!preg_match($uu_regexp_end, $part->body, $m, PREG_OFFSET_CAPTURE, $startpos)) {
                break;
            }

            $endpos    = $m[0][1];
            $begin_len = strlen($matches[0][0]);
            $end_len   = strlen($m[0][0]);

            // extract attachment body
            $filebody = substr($part->body, $startpos + $begin_len, $endpos - $startpos - $begin_len - 1);
            $filebody = str_replace("\r\n", "\n", $filebody);

            // remove attachment body from the message body
            $part->body = substr_replace($part->body, '', $startpos, $endpos + $end_len - $startpos);
            // mark body as modified so it will not be cached by rcube_imap_cache
            $part->body_modified = true;

            // add attachments to the structure
            $uupart = new rcube_message_part;
            $uupart->filename = trim($matches[1][0]);
            $uupart->encoding = 'stream';
            $uupart->body     = convert_uudecode($filebody);
            $uupart->size     = strlen($uupart->body);
            $uupart->mime_id  = 'uu.' . $part->mime_id . '.' . $pid;

            $ctype = rcube_mime::file_content_type($uupart->body, $uupart->filename, 'application/octet-stream', true);
            $uupart->mimetype = $ctype;
            list($uupart->ctype_primary, $uupart->ctype_secondary) = explode('/', $ctype);

            $parts[] = $uupart;
            $pid++;
        }

        return $parts;
    }
function uu_decode ( & $ part ) { // @TODO: messages may be huge, handle body via file $ part -> body = $ this -> get_part_body ( $ part -> mime_id ) ; $ parts = array ( ) ; $ pid = 0 ; // FIXME: line length is max.65? $ uu_regexp_begin = '/begin [0-7]{3,4} ([^\r\n]+)\r?\n/s' ; $ uu_regexp_end = '/`\r?\nend((\r?\n)|($))/s' ; while ( preg_match ( $ uu_regexp_begin , $ part -> body , $ matches , PREG_OFFSET_CAPTURE ) ) { $ startpos = $ matches [ 0 ] [ 1 ] ; if ( ! preg_match ( $ uu_regexp_end , $ part -> body , $ m , PREG_OFFSET_CAPTURE , $ startpos ) ) { break ; } $ endpos = $ m [ 0 ] [ 1 ] ; $ begin_len = strlen ( $ matches [ 0 ] [ 0 ] ) ; $ end_len = strlen ( $ m [ 0 ] [ 0 ] ) ; // extract attachment body $ filebody = substr ( $ part -> body , $ startpos + $ begin_len , $ endpos - $ startpos - $ begin_len - 1 ) ; $ filebody = str_replace ( "\r\n" , "\n" , $ filebody ) ; // remove attachment body from the message body $ part -> body = substr_replace ( $ part -> body , '' , $ startpos , $ endpos + $ end_len - $ startpos ) ; // mark body as modified so it will not be cached by rcube_imap_cache $ part -> body_modified = true ; // add attachments to the structure $ uupart = new rcube_message_part ; $ uupart -> filename = trim ( $ matches [ 1 ] [ 0 ] ) ; $ uupart -> encoding = 'stream' ; $ uupart -> body = convert_uudecode ( $ filebody ) ; $ uupart -> size = strlen ( $ uupart -> body ) ; $ uupart -> mime_id = 'uu.' . $ part -> mime_id . '.' . $ pid ; $ ctype = rcube_mime :: file_content_type ( $ uupart -> body , $ uupart -> filename , 'application/octet-stream' , true ) ; $ uupart -> mimetype = $ ctype ; list ( $ uupart -> ctype_primary , $ uupart -> ctype_secondary ) = explode ( '/' , $ ctype ) ; $ parts [ ] = $ uupart ; $ pid ++ ; } return $ parts ; }
Parse message body for UUencoded attachments bodies

@param rcube_message_part $part Message part to decode
@return array
Parse message body for UUencoded attachments bodies