%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/public_html/admin1/vendor/webklex/php-imap/src/ |
Upload File : |
<?php
/*
* File: Part.php
* Category: -
* Author: M.Goldenbaum
* Created: 17.09.20 20:38
* Updated: -
*
* Description:
* -
*/
namespace Webklex\PHPIMAP;
use Webklex\PHPIMAP\Exceptions\InvalidMessageDateException;
/**
* Class Part
*
* @package Webklex\PHPIMAP
*/
class Part {
/**
* Raw part
*
* @var string $raw
*/
public $raw = "";
/**
* Part type
*
* @var int $type
*/
public $type = IMAP::MESSAGE_TYPE_TEXT;
/**
* Part content
*
* @var string $content
*/
public $content = "";
/**
* Part subtype
*
* @var string $subtype
*/
public $subtype = null;
/**
* Part charset - if available
*
* @var string $charset
*/
public $charset = "utf-8";
/**
* Part encoding method
*
* @var int $encoding
*/
public $encoding = IMAP::MESSAGE_ENC_OTHER;
/**
* Alias to check if the part is an attachment
*
* @var boolean $ifdisposition
*/
public $ifdisposition = false;
/**
* Indicates if the part is an attachment
*
* @var string $disposition
*/
public $disposition = null;
/**
* Alias to check if the part has a description
*
* @var boolean $ifdescription
*/
public $ifdescription = false;
/**
* Part description if available
*
* @var string $description
*/
public $description = null;
/**
* Part filename if available
*
* @var string $filename
*/
public $filename = null;
/**
* Part name if available
*
* @var string $name
*/
public $name = null;
/**
* Part id if available
*
* @var string $id
*/
public $id = null;
/**
* The part number of the current part
*
* @var integer $part_number
*/
public $part_number = 0;
/**
* Part length in bytes
*
* @var integer $bytes
*/
public $bytes = null;
/**
* Part content type
*
* @var string|null $content_type
*/
public $content_type = null;
/**
* @var Header $header
*/
private $header = null;
/**
* Part constructor.
* @param $raw_part
* @param Header $header
* @param integer $part_number
*
* @throws InvalidMessageDateException
*/
public function __construct($raw_part, $header = null, $part_number = 0) {
$this->raw = $raw_part;
$this->header = $header;
$this->part_number = $part_number;
$this->parse();
}
/**
* Parse the raw parts
*
* @throws InvalidMessageDateException
*/
protected function parse(){
if ($this->header === null) {
$body = $this->findHeaders();
}else{
$body = $this->raw;
}
$this->parseDisposition();
$this->parseDescription();
$this->parseEncoding();
$this->charset = $this->header->get("charset");
$this->name = $this->header->get("name");
$this->filename = $this->header->get("filename");
if(!empty($this->header->get("id"))) {
$this->id = $this->header->get("id");
} else if(!empty($this->header->get("x_attachment_id"))){
$this->id = $this->header->get("x_attachment_id");
} else if(!empty($this->header->get("content_id"))){
$this->id = strtr($this->header->get("content_id"), [
'<' => '',
'>' => ''
]);
}
$content_types = $this->header->get("content_type");
if(!empty($content_types)){
$this->subtype = $this->parseSubtype($content_types);
$content_type = $content_types;
if (is_array($content_types)) {
$content_type = $content_types[0];
}
$parts = explode(';', $content_type);
$this->content_type = trim($parts[0]);
}
$this->content = trim(rtrim($body));
$this->bytes = strlen($this->content);
}
/**
* Find all available headers and return the left over body segment
*
* @return string
* @throws InvalidMessageDateException
*/
private function findHeaders(){
$body = $this->raw;
while (($pos = strpos($body, "\r\n")) > 0) {
$body = substr($body, $pos + 2);
}
$headers = substr($this->raw, 0, strlen($body) * -1);
$body = substr($body, 0, -2);
$this->header = new Header($headers);
return (string) $body;
}
/**
* Try to parse the subtype if any is present
* @param $content_type
*
* @return string
*/
private function parseSubtype($content_type){
if (is_array($content_type)) {
foreach ($content_type as $part){
if ((strpos($part, "/")) !== false){
return $this->parseSubtype($part);
}
}
return null;
}
if (($pos = strpos($content_type, "/")) !== false){
return substr($content_type, $pos + 1);
}
return null;
}
/**
* Try to parse the disposition if any is present
*/
private function parseDisposition(){
$content_disposition = $this->header->get("content_disposition");
if($content_disposition !== null) {
$this->ifdisposition = true;
$this->disposition = (is_array($content_disposition)) ? implode(' ', $content_disposition) : $content_disposition;
}
}
/**
* Try to parse the description if any is present
*/
private function parseDescription(){
$content_description = $this->header->get("content_description");
if($content_description !== null) {
$this->ifdescription = true;
$this->description = $content_description;
}
}
/**
* Try to parse the encoding if any is present
*/
private function parseEncoding(){
$encoding = $this->header->get("content_transfer_encoding");
if($encoding !== null) {
switch (strtolower($encoding)) {
case "quoted-printable":
$this->encoding = IMAP::MESSAGE_ENC_QUOTED_PRINTABLE;
break;
case "base64":
$this->encoding = IMAP::MESSAGE_ENC_BASE64;
break;
case "7bit":
$this->encoding = IMAP::MESSAGE_ENC_7BIT;
break;
case "8bit":
$this->encoding = IMAP::MESSAGE_ENC_8BIT;
break;
case "binary":
$this->encoding = IMAP::MESSAGE_ENC_BINARY;
break;
default:
$this->encoding = IMAP::MESSAGE_ENC_OTHER;
break;
}
}
}
/**
* Check if the current part represents an attachment
*
* @return bool
*/
public function isAttachment(){
$valid_disposition = in_array(strtolower($this->disposition), ClientManager::get('options.dispositions'));
if ($this->type == IMAP::MESSAGE_TYPE_TEXT && ($this->ifdisposition == 0 || (empty($this->disposition))) && !$valid_disposition) {
if (($this->subtype == null || in_array((strtolower($this->subtype)), ["plain", "html"])) && $this->filename == null && $this->name == null) {
return false;
}
}
return true;
}
}