📄 class.uebimiau_mail.php
字号:
$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 + -