📄 class.uebimiau.php
字号:
function build_text_body( $body )
{
$body = ereg_replace( "\n", "", $body );
$body = ereg_replace( "\r", "<br>\r\n", $this->make_link_clickable( htmlspecialchars( $body ) ) );
return "<font face=\"Courier New\" size=2>{$body}</font>";
}
function decode_qp( $text )
{
$text = ereg_replace( "\r\n", "\r", $text );
$text = ereg_replace( "=\r", "", $text );
$text = ereg_replace( "\r", "\r\n", $text );
$text = quoted_printable_decode( $text );
return $text;
}
function make_link_clickable( $str )
{
$str = eregi_replace( "([[:space:]])((f|ht)tps?:\\/\\/[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)", "\\1<a class=autolink href=\"\\2\" target=\"_blank\">\\2</a>", $str );
$str = eregi_replace( "([[:space:]])(www\\.[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)", "\\1<a class=autolink href=\"http://\\2\" target=\"_blank\">\\2</a>", $str );
$str = eregi_replace( "([[:space:]])([_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3})", "\\1<a class=autolink href=\"mailto:\\2\">\\2</a>", $str );
$str = eregi_replace( "^((f|ht)tp:\\/\\/[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $str );
$str = eregi_replace( "^(www\\.[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)", "<a class=autolink href=\"http://\\1\" target=\"_blank\">\\1</a>", $str );
$str = eregi_replace( "^([_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3})", "<a class=autolink href=\"mailto:\\1\">\\1</a>", $str );
return $str;
}
function process_message( $header, $body )
{
$mail_info = $this->get_mail_info( $header );
$ctype = $mail_info['content-type'];
$ctenc = $mail_info['content-transfer-encoding'];
if ( $ctype == "" )
{
$ctype = "text/plain";
}
$type = $ctype;
$ctype = split( ";", $ctype );
$types = split( "/", $ctype[0] );
$maintype = trim( strtolower( $types[0] ) );
$subtype = trim( strtolower( $types[1] ) );
switch ( $maintype )
{
case "text" :
$body = $this->compile_body( $body, $ctenc, $mail_info['content-type'] );
switch ( $subtype )
{
case "html" :
if ( !$this->use_html )
{
$body = eregi_replace( "(\r|\n)", "", $body );
$body = eregi_replace( "<br[ ]?[/]?>", "\r\n", $body );
$body = eregi_replace( "</p>", "\r\n\r\n", $body );
$body = $this->build_text_body( strip_tags( $body ) );
}
$msgbody = $body;
break;
default :
$msgbody = $this->build_text_body( $body );
break;
}
$this->add_body( $msgbody );
break;
case "multipart" :
if ( ereg( $subtype, "signed,mixed,related" ) )
{
$subtype = "complex";
}
switch ( $subtype )
{
case "alternative" :
$msgbody = $this->build_alternative_body( $ctype[1], $body );
break;
case "complex" :
$msgbody = $this->build_complex_body( $type, $body );
break;
default :
$thisattach = $this->build_attach( $header, $body, "", 0 );
}
break;
default :
$thisattach = $this->build_attach( $header, $body, "", 0 );
}
}
function build_attach( $header, $body, $boundary, $part, $mode = "info", $down = 0, $nametosave = "tmp.eml" )
{
global $mail;
global $temporary_directory;
global $userfolder;
$headers = $this->decode_header( $header );
$cdisp = $headers['content-disposition'];
$ctype = $headers['content-type'];
$ctype2 = explode( ";", $ctype );
$ctype2 = $ctype2[0];
$Atype = split( "/", $ctype );
$Acdisp = split( ";", $cdisp );
$tenc = $headers['content-transfer-encoding'];
$is_embebed = $headers['content-id'] != "";
$body = $this->compile_body( $body, $tenc, $ctype );
$fname = $Acdisp[1];
if ( ereg( "filename=(.*)", $fname, $regs ) )
{
$filename = $regs[1];
}
if ( $filename == "" && ereg( "name=(.*)", $ctype, $regs ) )
{
$filename = $regs[1];
}
$filename = ereg_replace( "\"(.*)\"", "\\1", $filename );
$filename = trim( $this->decode_mime_string( $filename ) );
if ( $filename == "" && $Atype[0] == "message" )
{
$attachheader = $this->fetch_structure( $body );
$attachheader = $this->decode_header( $attachheader['header'] );
$filename = $this->decode_mime_string( $attachheader['subject'] );
unset( $attachheader );
$filename = substr( ereg_replace( "[^A-Za-z0-9]", "_", $filename ), 0, 20 ).".eml";
}
else if ( $filename == "" )
{
$filename = uniqid( "" ).".tmp";
}
switch ( $mode )
{
case "info" :
$temp_array['name'] = $filename;
$temp_array['size'] = strlen( $body );
$temp_array['temp'] = $temp;
$temp_array['content-type'] = $ctype2;
$temp_array['content-disposition'] = $Acdisp[0];
$temp_array['boundary'] = $boundary;
$temp_array['part'] = $part;
$indice = count( $this->_content['attachments'] );
if ( !$is_embebed )
{
$this->_content['attachments'][$indice] = $temp_array;
}
return $temp_array;
case "down" :
$content_type = $down ? "application/octet-stream" : strtolower( $ctype2 );
$filesize = strlen( $body );
header( "Content-Type: {$content_type}; name=\"{$filename}\"\r\n"."Content-Length: {$filesize}\r\n" );
$cdisp = $down ? "attachment" : "inline";
header( "Content-Disposition: {$cdisp}; filename=\"{$filename}\"\r\n" );
echo $body;
break;
case "save" :
if ( !ereg( "\\.\\.", $nametosave ) )
{
$this->_save_file( $nametosave, $body );
}
return 1;
}
}
function compile_body( $body, $enctype, $ctype )
{
$enctype = explode( " ", $enctype );
$enctype = $enctype[0];
if ( strtolower( $enctype ) == "base64" )
{
$body = base64_decode( $body );
}
else if ( strtolower( $enctype ) == "quoted-printable" )
{
$body = $this->decode_qp( $body );
}
if ( ereg( "koi8", $ctype ) )
{
$body = convert_cyr_string( $body, "k", "w" );
}
return $body;
}
function download_attach( $header, $body, $bound = "", $part = 0, $down = 1 )
{
if ( $bound != "" )
{
$parts = $this->split_parts( $bound, $body );
$email = $this->fetch_structure( $parts[$part] );
$header = $email['header'];
$body = $email['body'];
unset( $email );
}
$this->build_attach( $header, $body, "", 0, $mode = "down", $down );
}
function save_attach( $header, $body, $filename )
{
$this->build_attach( $header, $body, "", 0, $mode = "save", 0, $filename );
}
function get_mail_info( $header )
{
$myarray = array( );
$headers = $this->decode_header( $header );
$message_id = ereg_replace( "<(.*)>", "\\1", $headers['message-id'] );
$myarray['content-type'] = $headers['content-type'];
$myarray['priority'] = $headers['x-priority'][0];
$myarray['content-transfer-encoding'] = str_replace( "GM", "-", $headers['content-transfer-encoding'] );
$myarray['message-id'] = trim( $message_id );
$received = ereg_replace( " ", " ", $headers['received'] );
$user_date = ereg_replace( " ", " ", $headers['date'] );
if ( eregi( "([0-9]{1,2}[ ]+[A-Z]{3}[ ]+[0-9]{4}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]?((\\+|-)[0-9]{4})?", $received, $regs ) )
{
$mydate = $regs[1];
$mytimezone = $regs[2];
if ( empty( $mytimezone ) )
{
if ( eregi( "((\\+|-)[0-9]{4})", $user_date, $regs ) )
{
$mytimezone = $regs[1];
}
else
{
$mytimezone = $this->timezone;
}
}
}
else if ( eregi( "(([A-Z]{3})[ ]+([0-9]{1,2})[ ]+([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]+([0-9]{4}))", $received, $regs ) )
{
$mydate = $regs[3]." ".$regs[2]." ".$regs[5]." ".$regs[4];
if ( eregi( "((\\+|-)[0-9]{4})", $user_date, $regs ) )
{
$mytimezone = $regs[1];
}
else
{
$mytimezone = $this->timezone;
}
}
else if ( eregi( "([0-9]{1,2}[ ]+[A-Z]{3}[ ]+[0-9]{4}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]?((\\+|-)[0-9]{4})?", $user_date, $regs ) )
{
$mydate = $regs[1];
$mytimezone = $regs[2];
if ( empty( $mytimezone ) )
{
if ( eregi( "((\\+|-)[0-9]{4})", $user_date, $regs ) )
{
$mytimezone = $regs[1];
}
else
{
$mytimezone = $this->timezone;
}
}
}
else
{
$mydate = date( "d M Y H:i" );
$mytimezone = $this->timezone;
}
$myarray['date'] = $this->build_mime_date( $mydate, $mytimezone );
$myarray['subject'] = $this->decode_mime_string( $headers['subject'] );
$myarray['from'] = $this->get_names( $headers['from'] );
$myarray['to'] = $this->get_names( $headers['to'] );
$myarray['cc'] = $this->get_names( $headers['cc'] );
$myarray['status'] = $headers['status'];
$myarray['read'] = $headers['x-um-status'];
return $myarray;
}
function build_mime_date( $mydate, $timezone = "+0000" )
{
if ( !ereg( "((\\+|-)[0-9]{4})", $timezone ) )
{
$timezone = "+0000";
}
$parts = explode( " ", $mydate );
if ( count( $parts ) < 4 )
{
return time( );
}
$day = $parts[0];
switch ( strtolower( $parts[1] ) )
{
case "jan" :
$mon = 1;
break;
case "feb" :
$mon = 2;
break;
case "mar" :
$mon = 3;
break;
case "apr" :
$mon = 4;
break;
case "may" :
$mon = 5;
break;
case "jun" :
$mon = 6;
break;
case "jul" :
$mon = 7;
break;
case "aug" :
$mon = 8;
break;
case "sep" :
$mon = 9;
break;
case "oct" :
$mon = 10;
break;
case "nov" :
$mon = 11;
break;
case "dec" :
$mon = 12;
}
$year = $parts[2];
$ahours = explode( ":", $parts[3] );
$hour = $ahours[0];
$min = $ahours[1];
$sec = $ahours[2];
$timezone_oper = $timezone[0];
$timezone_hour = intval( "{$timezone_oper}".substr( $timezone, 1, 2 ) ) * 3600;
$timezone_min = intval( "{$timezone_oper}".substr( $timezone, 3, 2 ) ) * 60;
$timezone_diff = $timezone_hour + $timezone_min;
$user_timezone_oper = $this->timezone[0];
$user_timezone_hour = intval( "{$user_timezone_oper}".substr( $this->timezone, 1, 2 ) ) * 3600;
$user_timezone_min = intval( "{$user_timezone_oper}".substr( $this->timezone, 3, 2 ) ) * 60;
$user_timezone_diff = $user_timezone_hour + $user_timezone_min;
$diff = $timezone_diff - $user_timezone_diff;
$mytimestamp = mktime( $hour, $min, $sec, $mon, $day, $year ) - $diff;
return $mytimestamp;
}
function decode( $email )
{
$email = $this->fetch_structure( $email );
$this->_msgbody = "";
$body = $email['body'];
$header = $email['header'];
$mail_info = $this->get_mail_info( $header );
$this->process_message( $header, $body );
$this->_content['headers'] = $header;
$this->_content['date'] = $mail_info['date'];
$this->_content['subject'] = $mail_info['subject'];
$this->_content['message-id'] = $mail_info['message-id'];
$this->_content['from'] = $mail_info['from'];
$this->_content['to'] = $mail_info['to'];
$this->_content['cc'] = $mail_info['cc'];
$this->_content['body'] = $this->_msgbody;
$this->_content['read'] = $mail_info['read'];
$this->_content['priority'] = $mail_info['priority'];
return $this->_content;
}
function split_parts( $boundary, $body )
{
$startpos = strpos( $body, $boundary ) + strlen( $boundary ) + 2;
$lenbody = strpos( $body, "\r\n{$boundary}--" ) - $startpos;
$body = substr( $body, $startpos, $lenbody );
$parts = split( $boundary, $body );
return split( "{$boundary}\r\n", $body );
}
function fetch_structure( $email )
{
$ARemail = array( );
$separador = "\r\n\r\n";
$header = trim( substr( $email, 0, strpos( $email, $separador ) ) );
$bodypos = strlen( $header ) + strlen( $separador );
$body = substr( $email, $bodypos, strlen( $email ) - $bodypos );
$ARemail['header'] = $header;
$ARemail['body'] = $body;
return $ARemail;
}
function get_boundary( $ctype )
{
if ( preg_match( "/boundary[ ]?=[ ]?([\"]?.*)/i", $ctype, $regs ) )
{
$boundary = $regs[1];
$boundary = preg_replace( "/^\\\"(.*)\\\"\$/", "\\1", $boundary );
$boundary = "--".str_replace( "[", "\\[", str_replace( "]", "\\]", $boundary ) );
return $boundary;
}
}
}
require( "./inc/class.uebimiau_mail.php" );
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -