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

📄 class.uebimiau.php

📁 极限网络智能办公系统—MYOA26—100%—源程序。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
	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 + -