function Parse($message_header, $charset)
{
$this->charset = defined('BX_MAIL_DEFAULT_CHARSET') && BX_MAIL_DEFAULT_CHARSET != '' ? BX_MAIL_DEFAULT_CHARSET : $charset;
if(preg_match("'content-type:.*?charsets*=s*([^rn;]+)'is", $message_header, $res))
$this->charset = mb_strtolower(trim($res[1], ' "'));
$message_header = preg_replace('/rn([x20t])/i', '1', $message_header);
$ar_message_header_tmp = explode("rn", $message_header);
for ($i = 0, $num = count($ar_message_header_tmp); $i < $num; $i++)
{
$this->arHeaderLines[] = CMailHeader::decodeHeader($ar_message_header_tmp[$i], $charset, $this->charset);
}
$this->arHeader = Array();
for($i = 0, $num = count($this->arHeaderLines); $i < $num; $i++)
{
$p = mb_strpos($this->arHeaderLines[$i], ":");
if($p>0)
{
$header_name = mb_strtoupper(trim(mb_substr($this->arHeaderLines[$i], 0, $p)));
$header_value = trim(mb_substr($this->arHeaderLines[$i], $p + 1));
$this->arHeader[$header_name] = $header_value;
}
}
$full_content_type = $this->arHeader["CONTENT-TYPE"];
if($full_content_type == '')
$full_content_type = "text/plain";
if(!($p = mb_strpos($full_content_type, ";")))
$p = mb_strlen($full_content_type);
$this->content_type = trim(mb_substr($full_content_type, 0, $p));
if(mb_strpos(mb_strtolower($this->content_type), "multipart/") === 0)
{
$this->bMultipart = true;
if (!preg_match("'boundarys*=s*(.+?);'i", $full_content_type, $res))
preg_match("'boundarys*=s*(.+)'i", $full_content_type, $res);
$this->boundary = trim($res[1], '"');
if($p = mb_strpos($this->content_type, "/"))
$this->MultipartType = mb_substr($this->content_type, $p + 1);
}
if($p < mb_strlen($full_content_type))
{
$add = mb_substr($full_content_type, $p + 1);
if(preg_match("'name=([^;]+)'i", $full_content_type, $res))
$this->filename = trim($res[1], '"');
}
$cd = isset($this->arHeader["CONTENT-DISPOSITION"]) ? $this->arHeader["CONTENT-DISPOSITION"] : '';
if ($cd <> '')
{
if (preg_match("'filename=([^;]+)'i", $cd, $res))
{
$this->filename = trim($res[1], '"');
}
else if (preg_match("'filename*=([^;]+)'i", $cd, $res))
{
[$fncharset, $fnstr] = preg_split("/'[^']*'/", trim($res[1], '"'));
$this->filename = CMailUtil::ConvertCharset(rawurldecode($fnstr), $fncharset, $charset);
}
else if (preg_match("'filename*0=([^;]+)'i", $cd, $res))
{
$this->filename = trim($res[1], '"');
$i = 0;
while (preg_match("'filename*".(++$i)."=([^;]+)'i", $cd, $res))
$this->filename .= trim($res[1], '"');
}
else if (preg_match("'filename*0*=([^;]+)'i", $cd, $res))
{
$fnstr = trim($res[1], '"');
$i = 0;
while (preg_match("'filename*".(++$i)."*?=([^;]+)'i", $cd, $res))
$fnstr .= trim($res[1], '"');
[$fncharset, $fnstr] = preg_split("/'[^']*'/", $fnstr);
if (!empty($fnstr))
{
$fnstr = rawurldecode($fnstr);
$this->filename = $fncharset ? CMailUtil::convertCharset($fnstr, $fncharset, $charset) : $fnstr;
}
}
}
if(isset($this->arHeader["CONTENT-ID"]) && $this->arHeader["CONTENT-ID"]!='')
$this->content_id = trim($this->arHeader["CONTENT-ID"], '"<>');
$this->strHeader = implode("rn", $this->arHeaderLines);
return true;
}