function getStructurePart($ret, $return, $key_prefix, $level) { foreach ($ret as $key => $ret_elem) { if (is_array($ret_elem) and !is_array($ret_elem[0])) { if (strtolower($ret_elem[0]) == "boundary") { continue; } if (isset($ret_elem[2]) and !is_array($ret_elem[2]) and strtolower($ret_elem[2]) == "boundary") { continue; } $id = $key_prefix . ($key + 1); $type = "text/plain"; if (!empty($ret_elem[1]) and $ret_elem[1] != "NIL") { $type = strtolower($ret_elem[0] . "/" . $ret_elem[1]); } $name = str_replace(".", "_", $id) . "_" . strtolower($ret_elem[0]) . "." . str_replace("plain", "txt", strtolower($ret_elem[1])); if (!empty($ret_elem[3]) and $ret_elem[3] != "NIL") { $cid = trim($ret_elem[3], "<>"); } else { $cid = ""; } if (!empty($ret_elem[2][0]) and strtolower($ret_elem[2][0]) == "name") { $name = $ret_elem[2][1]; } if (isset($ret_elem[9]) and $ret_elem[8] == "NIL") { $ret_elem[8] = $ret_elem[9]; } if (!empty($ret_elem[8][0][0]) and strtolower($ret_elem[8][1][0]) == "filename") { $name = $ret_elem[8][1][1]; } if (!isset($ret_elem[6])) { continue; } $return[] = array("id" => $id, "level" => $level, "contenttype" => strtolower($type), "encoding" => strtolower($ret_elem[5]), "charset" => (!empty($ret_elem[2][0]) and strtolower($ret_elem[2][0]) == "charset") ? strtolower($ret_elem[2][1]) : "", "size" => $ret_elem[6], "name" => modify::decode_subject($name), "disposition" => (isset($ret_elem[8]) and is_array($ret_elem[8]) and !is_array($ret_elem[8][0])) ? $ret_elem[8][0] : "", "cid" => $cid); $last_id = count($return) - 1; if (strtolower($return[$last_id]["contenttype"]) == "text/calendar") { $return[$last_id]["disposition"] = "attachment"; if (empty($return[$last_id]["name"])) { $return[$last_id]["name"] = "appointment.ics"; } } if ($type == "message/rfc822" and is_array($ret_elem[8])) { $return[$last_id]["level"]++; if (!is_array($ret_elem[8][0])) { $ret_elem[8] = array($ret_elem[8]); } $return = $this->getStructurePart($ret_elem[8], $return, $id . ".", $level + 1); } } else { if (is_array($ret_elem)) { $id = $key_prefix . ($key + 1); $return = $this->getStructurePart($ret_elem, $return, $id . ".", $level); } } } return $return; }
/** * Returns the headers of the specified message in an * associative array. Array keys are the header names, array * values are the header values. In the case of multiple headers * having the same names, eg Received:, the array value will be * an indexed array of all the header values. * * @param integer $msg_id Message number * @return mixed Either array of headers or false on error */ function getParsedHeaders($msg_id) { $headers = array(); if ($this->_state == NET_POP3_STATE_TRANSACTION) { $raw_headers = rtrim($this->getRawHeaders($msg_id)); $raw_headers = preg_replace("/\r\n[ \t]+/", ' ', $raw_headers); // Unfold headers $raw_headers = explode("\r\n", $raw_headers); foreach ($raw_headers as $value) { $name = strtolower(substr($value, 0, $pos = strpos($value, ':'))); $value = ltrim(substr($value, $pos + 1)); if ($name == "subject" or $name == "to" or $name == "from") { $value = modify::decode_subject($value); } if (isset($headers[$name]) and is_array($headers[$name])) { $headers[$name][] = $value; } elseif (isset($headers[$name])) { $headers[$name] = array($headers[$name], $value); } else { $headers[$name] = $value; } } return $headers; } return false; }
private static function _drawheader($headers) { $content = "Subject: " . modify::decode_subject($headers["subject"]) . "\n"; $content .= "Date: " . $headers["date"] . "\n"; $content .= "From: " . modify::decode_subject($headers["from"]) . "\n"; $content .= "To: " . modify::decode_subject($headers["to"]) . "\n"; return $content; }