class.uebimiau.php
来自「通达OA2007SE源代码 非常好的」· PHP 代码 · 共 868 行 · 第 1/2 页
PHP
868 行
', '
', $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 ('(
|
)', '', $body);
$body = eregi_replace ('<br[ ]?[/]?>', '
', $body);
$body = eregi_replace ('</p>', '
', $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 == '') AND ereg ('name=(.*)', $ctype, $regs)))
{
$filename = $regs[1];
}
$filename = ereg_replace ('"(.*)"', '\\1', $filename);
$filename = trim ($this->decode_mime_string ($filename));
if ((($filename == '') AND ($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;
break;
}
case 'down':
{
$content_type = ($down ? 'application/octet-stream' : strtolower ($ctype2));
$filesize = strlen ($body);
header ((((((''.'Content-Type: ').$content_type).'; name="').$filename).'"'));
header (((''.'Content-Length: ').$filesize));
$cdisp = ($down ? 'attachment' : 'inline');
header ((((((''.'Content-Disposition: ').$cdisp).'; filename="').$filename).'"'));
echo $body;
break;
}
case 'save':
{
if (!ereg ('\\.\\.', $nametosave))
{
$this->_save_file ($nametosave, $body);
}
return 1;
break;
}
}
}
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;
break;
}
}
$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, (((''.'
').$boundary).'--')) - $startpos);
$body = substr ($body, $startpos, $lenbody);
$parts = split ($boundary, $body);
return split (((''.$boundary).'
'), $body);
}
function fetch_structure ($email)
{
$ARemail = array ();
$separador = '
';
$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 + =
减小字号Ctrl + -
显示快捷键?