factory = $factory; if (isset($charset)) { $this->setCharset($charset); } } public function newInstance() { return new self($this->factory); } /** * Set the charset used by these headers. * * @param string $charset */ public function setCharset($charset) { $this->charset = $charset; $this->factory->charsetChanged($charset); $this->notifyHeadersOfCharset($charset); } /** * Add a new Mailbox Header with a list of $addresses. * * @param string $name * @param array|string $addresses */ public function addMailboxHeader($name, $addresses = null) { $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); } /** * Add a new Date header using $dateTime. * * @param string $name */ public function addDateHeader($name, DateTimeInterface $dateTime = null) { $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); } /** * Add a new basic text header with $name and $value. * * @param string $name * @param string $value */ public function addTextHeader($name, $value = null) { $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); } /** * Add a new ParameterizedHeader with $name, $value and $params. * * @param string $name * @param string $value * @param array $params */ public function addParameterizedHeader($name, $value = null, $params = []) { $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); } /** * Add a new ID header for Message-ID or Content-ID. * * @param string $name * @param string|array $ids */ public function addIdHeader($name, $ids = null) { $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); } /** * Add a new Path header with an address (path) in it. * * @param string $name * @param string $path */ public function addPathHeader($name, $path = null) { $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); } /** * Returns true if at least one header with the given $name exists. * * If multiple headers match, the actual one may be specified by $index. * * @param string $name * @param int $index * * @return bool */ public function has($name, $index = 0) { $lowerName = strtolower($name ?? ''); if (!array_key_exists($lowerName, $this->headers)) { return false; } if (func_num_args() < 2) { // index was not specified, so we only need to check that there is at least one header value set return (bool) count($this->headers[$lowerName]); } return array_key_exists($index, $this->headers[$lowerName]); } /** * Set a header in the HeaderSet. * * The header may be a previously fetched header via {@link get()} or it may * be one that has been created separately. * * If $index is specified, the header will be inserted into the set at this * offset. * * @param int $index */ public function set(Swift_Mime_Header $header, $index = 0) { $this->storeHeader($header->getFieldName(), $header, $index); } /** * Get the header with the given $name. * * If multiple headers match, the actual one may be specified by $index. * Returns NULL if none present. * * @param string $name * @param int $index * * @return Swift_Mime_Header|null */ public function get($name, $index = 0) { $name = strtolower($name ?? ''); if (func_num_args() < 2) { if ($this->has($name)) { $values = array_values($this->headers[$name]); return array_shift($values); } } else { if ($this->has($name, $index)) { return $this->headers[$name][$index]; } } } /** * Get all headers with the given $name. * * @param string $name * * @return array */ public function getAll($name = null) { if (!isset($name)) { $headers = []; foreach ($this->headers as $collection) { $headers = array_merge($headers, $collection); } return $headers; } $lowerName = strtolower($name ?? ''); if (!array_key_exists($lowerName, $this->headers)) { return []; } return $this->headers[$lowerName]; } /** * Return the name of all Headers. * * @return array */ public function listAll() { $headers = $this->headers; if ($this->canSort()) { uksort($headers, [$this, 'sortHeaders']); } return array_keys($headers); } /** * Remove the header with the given $name if it's set. * * If multiple headers match, the actual one may be specified by $index. * * @param string $name * @param int $index */ public function remove($name, $index = 0) { $lowerName = strtolower($name ?? ''); unset($this->headers[$lowerName][$index]); } /** * Remove all headers with the given $name. * * @param string $name */ public function removeAll($name) { $lowerName = strtolower($name ?? ''); unset($this->headers[$lowerName]); } /** * Define a list of Header names as an array in the correct order. * * These Headers will be output in the given order where present. */ public function defineOrdering(array $sequence) { $this->order = array_flip(array_map('strtolower', $sequence)); } /** * Set a list of header names which must always be displayed when set. * * Usually headers without a field value won't be output unless set here. */ public function setAlwaysDisplayed(array $names) { $this->required = array_flip(array_map('strtolower', $names)); } /** * Notify this observer that the entity's charset has changed. * * @param string $charset */ public function charsetChanged($charset) { $this->setCharset($charset); } /** * Returns a string with a representation of all headers. * * @return string */ public function toString() { $string = ''; $headers = $this->headers; if ($this->canSort()) { uksort($headers, [$this, 'sortHeaders']); } foreach ($headers as $collection) { foreach ($collection as $header) { if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { $string .= $header->toString(); } } } return $string; } /** * Returns a string representation of this object. * * @return string * * @see toString() */ public function __toString() { return $this->toString(); } /** * Save a Header to the internal collection */ private function storeHeader($name, Swift_Mime_Header $header, $offset = null) { if (!isset($this->headers[strtolower($name ?? '')])) { $this->headers[strtolower($name ?? '')] = []; } if (!isset($offset)) { $this->headers[strtolower($name ?? '')][] = $header; } else { $this->headers[strtolower($name ?? '')][$offset] = $header; } } /** * Test if the headers can be sorted */ private function canSort() { return count($this->order) > 0; } /** * uksort() algorithm for Header ordering */ private function sortHeaders($a, $b) { $lowerA = strtolower($a ?? ''); $lowerB = strtolower($b ?? ''); $aPos = array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; $bPos = array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; if (-1 === $aPos && -1 === $bPos) { // just be sure to be determinist here return $a > $b ? -1 : 1; } if (-1 == $aPos) { return 1; } elseif (-1 == $bPos) { return -1; } return $aPos < $bPos ? -1 : 1; } /** * Test if the given Header is always displayed */ private function isDisplayed(Swift_Mime_Header $header) { return array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required); } /** * Notify all Headers of the new charset */ private function notifyHeadersOfCharset($charset) { foreach ($this->headers as $headerGroup) { foreach ($headerGroup as $header) { $header->setCharset($charset); } } } /** * Make a deep copy of object. */ public function __clone() { $this->factory = clone $this->factory; foreach ($this->headers as $groupKey => $headerGroup) { foreach ($headerGroup as $key => $header) { $this->headers[$groupKey][$key] = clone $header; } } } } __halt_compiler();----SIGNATURE:----a6t12X6kx8zpEEsHmagThiMjaLWvCG2MWpPvsky/pcR4Rv1xy3ESzjBQDj3p1W6ar+OfZFvH3hmtmM3/z+oDixcgJ0cEOrWs+CbHRLD0izY6YgcfSVan34gCTSWEg8miWBthpUDN0qs82ZfBdQePry8rB0CwizTXIkgaB+5UtOhM6YPJOx+AgK2/GmYfV5ERCb2KKcIwsbjPasqVAeJylZa8VZwLDPwigixtSkZIlYAmNtHsQ3moJJ1h3GfBEg6PZ7bFahgyKDkCtbZ9IOUKGlQF1wjpVYNkQuYQEcv5LCoBBdh7TXdBt5UbhhhD5G01/0jMCJzmJDSMctaB3iCtcrgabrML/aubjiubvaE0dNLUA0HRSQHEOvI4hgwV3xseNsFHy1jcolqnYWDF42mAyxggnKDHaVmqflbm5yo8PkTOTUedLVnYJUJXVGKbaODGbZh+psA7aLUIPokNW9EIo7AQE9I7JDxNouCz/OqyWtOl/YtVHSRbGuvJUg0aiaFWv5rVwX9oaICMpjy57XihYyJ1NCktMRv80pJsus2n1lIxpVKncQqPx2itxs06z/jYR2rB7muSxTVGqjysJ8IG1fSNdvYEQVN6OeUcXJeOUOdFFDm4inv0J9FETytyH80JYTAou+Yf4KAqtHKki/BEEVX5vV84bHtla8imEYzvoIg=----ATTACHMENT:----OTE4Mzc3NzIyODEzNzk1NSA0NTg2NzY1NzQ1ODU3MTUxIDU5NjIyNTE2Mjk4NTkxNTc=