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

📄 class.uebimiau_mail.php

📁 极限网络智能办公系统—MYOA26—100%—源程序。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
					$currentname = $msg['localname'];
					$basename = basename( $currentname );
					$newfilename = $this->user_folder."{$tofolder}/{$basename}";
					copy( $currentname, $newfilename );
					unlink( $currentname );
				}
				$this->mail_set_flag( $msg, "\\DELETED", "+" );
			}
			return 1;
		}
		else if ( strtoupper( $tofolder ) != "INBOX" && strtolower( $tofolder ) != strtolower( $msg['folder'] ) )
		{
			if ( strtoupper( $msg['folder'] ) == "INBOX" )
			{
				$this->mail_send_command( "TOP ".$msg['id']." 0" );
				$buffer = $this->mail_get_line( );
				if ( !ereg( "^(\\+OK)", $buffer ) )
				{
					$this->mail_error_msg = $buffer;
					return 0;
				}
				unset( $header );
				while ( !feof( $this->mail_connection ) )
				{
					$buffer = $this->mail_get_line( );
					if ( trim( $buffer ) == "." )
					{
					}
					else
					{
						$header .= "{$buffer}\r\n";
					}
				}
				$mail_info = $this->get_mail_info( $header );
				if ( base64_encode( $mail_info['message-id'] ) != base64_encode( $msg['message-id'] ) )
				{
					$this->mail_error_msg = $error_retrieving;
					return 0;
				}
				if ( !file_exists( $msg['localname'] ) )
				{
					if ( !$this->mail_retr_msg( $msg, 0 ) )
					{
						return 0;
					}
					$this->mail_set_flag( $msg, "\\SEEN", "-" );
				}
				$this->mail_send_command( "DELE ".$msg['id'] );
				$buffer = $this->mail_get_line( );
				if ( !ereg( "^(\\+OK)", $buffer ) )
				{
					$this->mail_error_msg = $buffer;
					return 0;
				}
			}
			if ( file_exists( $msg['localname'] ) )
			{
				$currentname = $msg['localname'];
				$basename = basename( $currentname );
				$newfilename = $this->user_folder."{$tofolder}/{$basename}";
				copy( $currentname, $newfilename );
				unlink( $currentname );
			}
		}
		else
		{
			return 0;
		}
		return 1;
	}

	function mail_list_msgs( $boxname = "INBOX" )
	{
		global $userfolder;
		if ( in_array( strtolower( $boxname ), $this->_system_folders ) )
		{
			$boxname = strtolower( $boxname );
		}
		$msglist = array( );
		if ( $this->mail_protocol == "imap" )
		{
			$boxinfo = $this->mail_select_box( $boxname );
			if ( is_array( $boxinfo ) && $boxinfo['exists'] )
			{
				$this->mail_send_command( "FETCH 1:".$boxinfo['exists']." (FLAGS RFC822.SIZE RFC822.HEADER)" );
				$buffer = $this->mail_get_line( );
				if ( !eregi( "^(".$this->_sid." (NO|BAD))", $buffer ) )
				{
					$counter = 0;
					while ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
					{
						if ( eregi( "[ ]?\\*[ ]?([0-9]+)[ ]?FETCH", $buffer, $regs ) )
						{
							$curmsg = $regs[1];
							eregi( "SIZE[ ]?([0-9]+)", $buffer, $regs );
							$size = $regs[1];
							eregi( "FLAGS[ ]?\\((.*)\\)", $buffer, $regs );
							$flags = $regs[1];
						}
						else if ( trim( $buffer ) != ")" && trim( $buffer ) != "" )
						{
							$header .= "{$buffer}\r\n";
						}
						else if ( trim( $buffer ) == ")" )
						{
							$msglist[$counter]['id'] = $counter + 1;
							$msglist[$counter]['msg'] = $curmsg;
							$msglist[$counter]['size'] = $size;
							$msglist[$counter]['flags'] = strtoupper( $flags );
							$msglist[$counter]['header'] = $header;
							++$counter;
							$header = "";
						}
						$buffer = $this->mail_get_line( );
					}
				}
			}
		}
		else if ( strtoupper( $boxname ) == "INBOX" )
		{
			$this->mail_send_command( "LIST" );
			$buffer = $this->mail_get_line( );
			if ( !ereg( "^(\\+OK)", $buffer ) )
			{
				$this->mail_error_msg = $buffer;
				return $msglist;
			}
			$counter = 0;
			while ( !feof( $this->mail_connection ) )
			{
				$buffer = $this->mail_get_line( );
				if ( trim( $buffer ) == "." )
				{
				}
				else
				{
					$msgs = split( " ", $buffer );
					if ( is_numeric( $msgs[0] ) )
					{
						$msglist[$counter]['id'] = $counter + 1;
						$msglist[$counter]['msg'] = $msgs[0];
						$msglist[$counter]['size'] = $msgs[1];
						++$counter;
					}
				}
			}
			if ( count( $msglist ) == 0 )
			{
				return $msglist;
			}
			$i = 0;
			for ( ;	$i < count( $msglist );	++$i	)
			{
				$this->mail_send_command( "TOP ".$msglist[$i]['msg']." 0" );
				$buffer = $this->mail_get_line( );
				if ( !ereg( "^(\\+OK)", $buffer ) )
				{
					$this->mail_error_msg = $buffer;
					return 0;
				}
				while ( !feof( $this->mail_connection ) )
				{
					$buffer = $this->mail_get_line( );
					if ( trim( $buffer ) == "." )
					{
						break;
					}
					else if ( 3 < strlen( $buffer ) )
					{
						$header .= "{$buffer}\r\n";
					}
				}
				$msglist[$i]['header'] = $header;
				$header = "";
			}
		}
		else
		{
			$datapath = $userfolder.$boxname;
			$i = 0;
			$msglist = array( );
			$d = dir( $datapath );
			$dirsize = 0;
			while ( $entry = $d->read( ) )
			{
				$fullpath = "{$datapath}/{$entry}";
				if ( is_file( $fullpath ) )
				{
					$thisheader = $this->_get_headers_from_cache( $fullpath );
					$msglist[$i]['id'] = $i + 1;
					$msglist[$i]['msg'] = $i;
					$msglist[$i]['header'] = $thisheader;
					$msglist[$i]['size'] = filesize( $fullpath );
					$msglist[$i]['localname'] = $fullpath;
					++$i;
				}
			}
			$d->close( );
		}
		$i = 0;
		for ( ;	$i < count( $msglist );	++$i	)
		{
			$mail_info = $this->get_mail_info( $msglist[$i]['header'] );
			$msglist[$i]['date'] = $mail_info['date'];
			$msglist[$i]['subject'] = $mail_info['subject'];
			$msglist[$i]['message-id'] = $mail_info['message-id'];
			$msglist[$i]['from'] = $mail_info['from'];
			$msglist[$i]['to'] = $mail_info['to'];
			$msglist[$i]['fromname'] = $mail_info['from'][0]['name'];
			$msglist[$i]['to'] = $mail_info['to'];
			$msglist[$i]['cc'] = $mail_info['cc'];
			$msglist[$i]['headers'] = $header;
			$msglist[$i]['priority'] = $mail_info['priority'];
			$msglist[$i]['attach'] = eregi( "(multipart/mixed|multipart/related|application)", $mail_info['content-type'] ) ? 1 : 0;
			if ( $msglist[$i]['localname'] == "" )
			{
				$msglist[$i]['localname'] = $this->_get_local_name( $mail_info, $boxname );
			}
			$msglist[$i]['read'] = file_exists( $flocalname ) ? 1 : 0;
			if ( $this->mail_protocol != "imap" && file_exists( $msglist[$i]['localname'] ) )
			{
				$headers = $this->_get_headers_from_cache( $msglist[$i]['localname'] );
				$headers = $this->decode_header( $headers );
				$msglist[$i]['flags'] = strtoupper( $headers['x-um-flags'] );
			}
			$msglist[$i]['folder'] = $boxname;
		}
		return $msglist;
	}

	function _get_local_name( $message, $boxname )
	{
		$flocalname = trim( $this->user_folder."{$boxname}/".md5( trim( $message['subject'].$message['date'].$message['message-id'] ) ).".eml" );
		return $flocalname;
	}

	function mail_list_boxes( $boxname = "*" )
	{
		$boxlist = array( );
		if ( $this->mail_protocol == "imap" )
		{
			$this->mail_send_command( "LIST \"\" {$boxname}" );
			$buffer = $this->mail_get_line( );
			if ( eregi( "^(".$this->_sid." (NO|BAD))", $buffer ) )
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
			while ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				$tmp = array( );
				ereg( "\\((.*)\\)", $buffer, $regs );
				$flags = $regs[1];
				$tmp['flags'] = $flags;
				ereg( "\\((.*)\\)", $buffer, $regs );
				$flags = $regs[1];
				$pos = strpos( $buffer, ")" );
				$rest = substr( $buffer, $pos + 2 );
				$pos = strpos( $rest, " " );
				$tmp['prefix'] = ereg_replace( "\"(.*)\"", "\\1", substr( $rest, 0, $pos ) );
				$tmp['name'] = trim( ereg_replace( "\"(.*)\"", "\\1", substr( $rest, $pos + 1 ) ) );
				$buffer = $this->mail_get_line( );
				$boxlist[] = $tmp;
			}
		}
		else
		{
			$d = dir( $this->user_folder );
			while ( $entry = $d->read( ) )
			{
				if ( in_array( strtolower( $entry ), $this->_system_folders ) )
				{
					$entry = strtolower( $entry );
				}
				if ( is_dir( $this->user_folder.$entry ) && $entry != ".." && substr( $entry, 0, 1 ) != "_" && $entry != "." )
				{
					$boxlist[]['name'] = $entry;
				}
			}
			$d->close( );
		}
		return $boxlist;
	}

	function mail_select_box( $boxname = "INBOX" )
	{
		if ( $this->mail_protocol == "imap" )
		{
			$boxname = ereg_replace( "\"(.*)\"", "\\1", $boxname );
			$this->mail_send_command( "SELECT \"{$boxname}\"" );
			$buffer = $this->mail_get_line( );
			if ( eregi( "^(".$this->_sid." (NO|BAD))", $buffer ) )
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
			$boxinfo = array( );
			while ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				if ( eregi( "[ ]?\\*[ ]?([0-9]+)[ ]EXISTS", $buffer, $regs ) )
				{
					$boxinfo['exists'] = $regs[1];
				}
				if ( eregi( "[ ]?\\*[ ]?([0-9])+[ ]RECENT", $buffer, $regs ) )
				{
					$boxinfo['recent'] = $regs[1];
				}
				if ( eregi( "[ ]?\\*[ ]?FLAGS[ ]?\\((.*)\\)", $buffer, $regs ) )
				{
					$boxinfo['flags'] = $regs[1];
				}
				$buffer = $this->mail_get_line( );
			}
		}
		$this->_current_folder = $boxname;
		return $boxinfo;
	}

	function mail_create_box( $boxname )
	{
		if ( $this->mail_protocol == "imap" )
		{
			$boxname = ereg_replace( "\"(.*)\"", "\\1", $boxname );
			$this->mail_send_command( "CREATE \"{$boxname}\"" );
			$buffer = $this->mail_get_line( );
			if ( eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				@mkdir( $this->user_folder.$boxname, 511 );
				return 1;
			}
			else
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
		}
		else if ( @mkdir( $this->user_folder.$boxname, 511 ) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}

	function mail_delete_box( $boxname )
	{
		if ( $this->mail_protocol == "imap" )
		{
			$boxname = ereg_replace( "\"(.*)\"", "\\1", $boxname );
			$this->mail_send_command( "DELETE \"{$boxname}\"" );
			$buffer = $this->mail_get_line( );
			if ( eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				$this->_rmdirr( $this->user_folder.$boxname );
				return 1;
			}
			else
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
		}
		else if ( is_dir( $this->user_folder.$boxname ) )
		{
			$this->_rmdirr( $this->user_folder.$boxname );
			return 1;
		}
		else
		{
			return 0;
		}
	}

	function mail_save_message( $boxname, $message, $flags = "" )
	{
		if ( $this->mail_protocol == "imap" )
		{
			$boxname = ereg_replace( "\"(.*)\"", "\\1", $boxname );
			$this->mail_send_command( "APPEND \"{$boxname}\" ({$flags}) {".strlen( $message )."}" );
			$this->mail_send_command( "{$message}\r\n" );
			$buffer = $this->mail_get_line( );
			if ( $buffer[0] == "+" )
			{
				$this->mail_send_command( "\r\n" );
				$buffer = $this->mail_get_line( );
			}
			if ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				return 0;
			}
		}
		if ( is_dir( $this->user_folder.$boxname ) )
		{
			$email = $this->fetch_structure( $message );
			$mail_info = $this->get_mail_info( $email['header'] );
			$filename = $this->_get_local_name( $mail_info, $boxname );
			if ( !empty( $flags ) )
			{
				$message = trim( $email['header'] )."\r\nX-UM-Flags: {$flags}\r\n\r\n".$email['body'];
			}
			unset( $email );
			$this->_save_file( $filename, $message );
			return 1;
		}
	}

	function mail_set_flag( &$msg, $flagname, $flagtype = "+" )
	{
		$flagname = strtoupper( $flagname );
		if ( $this->mail_protocol == "imap" )
		{
			if ( strtolower( $this->_current_folder ) != strtolower( $msg['folder'] ) )
			{
				$this->mail_select_box( $msg['folder'] );
			}
			if ( $flagtype != "+" )
			{
				$flagtype = "-";
			}
			$this->mail_send_command( "STORE ".$msg['id'].":".$msg['id']." ".$flagtype."FLAGS ({$flagname})" );
			$buffer = $this->mail_get_line( );
			while ( !eregi( "^(".$this->_sid." (OK|NO|BAD))", $buffer ) )
			{
				$buffer = $this->mail_get_line( );
			}
			if ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
		}
		if ( file_exists( $msg['localname'] ) )
		{
			$email = $this->_read_file( $msg['localname'] );
			$email = $this->fetch_structure( $email );
			$header = $email['header'];
			$body = $email['body'];
			$headerinfo = $this->decode_header( $header );
			$strFlags = trim( strtoupper( $msg['flags'] ) );
			$flags = array( );
			if ( !empty( $strFlags ) )
			{
				$flags = split( " ", $strFlags );
			}
			if ( $flagtype == "+" )
			{
				if ( !in_array( $flagname, $flags ) )
				{
					$flags[] = $flagname;
				}
			}
			else
			{
				while ( list( $key, $value ) = each( $flags ) )
				{
					if ( strtoupper( $value ) == $flagname )
					{
						$pos = $key;
					}
				}
				if ( isset( $pos ) )
				{
					unset( $flags->$pos );
				}
			}
			$flags = join( " ", $flags );
			if ( !eregi( "X-UM-Flags", $header ) )
			{
				$header .= "\r\nX-UM-Flags: {$flags}";
			}
			else
			{
				$header = eregi_replace( "X-UM-Flags: (.*)", "X-UM-Flags: {$flags}", $header );
			}
			$msg['header'] = $header;
			$msg['flags'] = $flags;
			$email = "{$header}\r\n\r\n{$body}";
			$this->_save_file( $msg['localname'], $email );
			unset( $email );
			unset( $header );
			unset( $body );
			unset( $flags );
			unset( $headerinfo );
		}
		return 1;
	}

	function mail_disconnect( )
	{
		if ( $this->mail_connected( ) )
		{
			if ( $this->mail_protocol == "imap" )
			{
				if ( $this->_require_expunge )
				{
					$this->mail_expunge( );
				}
				$this->mail_send_command( "LOGOUT" );
				$tmp = $this->mail_get_line( );
			}
			else
			{
				$this->mail_send_command( "QUIT" );
			}
			$tmp = $this->mail_get_line( );
			fclose( $this->mail_connection );
			$this->mail_connection = "";
			return 1;
		}
		else
		{
			return 0;
		}
	}

	function mail_expunge( )
	{
		if ( $this->mail_protocol == "imap" )
		{
			$this->mail_send_command( "EXPUNGE" );
			$buffer = $this->mail_get_line( );
			if ( eregi( "^(".$this->_sid." (NO|BAD))", $buffer ) )
			{
				$this->mail_error_msg = $buffer;
				return 0;
			}
			while ( !eregi( "^(".$this->_sid." OK)", $buffer ) )
			{
				$buffer = $this->mail_get_line( );
			}
		}
		return 1;
	}

}

?>

⌨️ 快捷键说明

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