public static function fromString($headerLine) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); // check to ensure proper header type for this factory if (strtolower($name) !== 'sender') { throw new Exception\InvalidArgumentException('Invalid header name for Sender string'); } $header = new static(); /** * matches the header value so that the email must be enclosed by < > when a name is present * 'name' and 'email' capture groups correspond respectively to 'display-name' and 'addr-spec' in the ABNF * @see https://tools.ietf.org/html/rfc5322#section-3.4 */ $hasMatches = preg_match('/^(?:(?P<name>.+)\\s)?(?(name)<|<?)(?P<email>[^\\s]+?)(?(name)>|>?)$/', $value, $matches); if ($hasMatches !== 1) { throw new Exception\InvalidArgumentException('Invalid header value for Sender string'); } $senderName = trim($matches['name']); if (empty($senderName)) { $senderName = null; } $header->setAddress($matches['email'], $senderName); return $header; }
public static function fromString($headerLine) { list($fieldName, $fieldValue) = GenericHeader::splitHeaderLine($headerLine); $decodedValue = HeaderWrap::mimeDecodeValue($fieldValue); $wasEncoded = $decodedValue !== $fieldValue; $fieldValue = $decodedValue; if (strtolower($fieldName) !== static::$type) { throw new Exception\InvalidArgumentException(sprintf('Invalid header line for "%s" string', __CLASS__)); } $header = new static(); if ($wasEncoded) { $header->setEncoding('UTF-8'); } // split value on "," $fieldValue = str_replace(Headers::FOLDING, ' ', $fieldValue); $fieldValue = preg_replace('/[^:]+:([^;]*);/', '$1,', $fieldValue); $values = str_getcsv($fieldValue, ','); array_walk($values, function (&$value) { $value = trim($value); $value = self::stripComments($value); }); $values = array_filter($values); $addressList = $header->getAddressList(); foreach ($values as $address) { $addressList->addFromString($address); } return $header; }
public static function fromString($headerLine) { $headerLine = iconv_mime_decode($headerLine, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); list($name, $value) = GenericHeader::splitHeaderLine($headerLine); // check to ensure proper header type for this factory if (strtolower($name) !== 'content-type') { throw new Exception\InvalidArgumentException('Invalid header line for Content-Type string'); } $value = str_replace(Headers::FOLDING, " ", $value); $values = preg_split('#\\s*;\\s*#', $value); $type = array_shift($values); //Remove empty values $values = array_filter($values); $header = new static(); $header->setType($type); $values = array_filter($values); if (count($values)) { foreach ($values as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair, 2); $value = trim($value, "'\" \t\n\r\v"); $header->addParameter($key, $value); } } return $header; }
public static function fromString($headerLine) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); // check to ensure proper header type for this factory if (strtolower($name) !== 'received') { throw new Exception\InvalidArgumentException('Invalid header line for Received string'); } $header = new static($value); return $header; }
public static function fromString($headerLine) { list($name, $value) = Header\GenericHeader::splitHeaderLine($headerLine); $value = Header\HeaderWrap::mimeDecodeValue($value); if (strtolower($name) !== 'x-queue-item-id') { throw new Header\Exception\InvalidArgumentException('Invalid header line for Message-ID string'); } $header = new static(); $header->setId($value); return $header; }
public static function fromString($headerLine) { $headerLine = iconv_mime_decode($headerLine, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); list($name, $value) = GenericHeader::splitHeaderLine($headerLine); // check to ensure proper header type for this factory if (strtolower($name) !== 'content-transfer-encoding') { throw new Exception\InvalidArgumentException('Invalid header line for Content-Transfer-Encoding string'); } $header = new static(); $header->setTransferEncoding($value); return $header; }
public static function fromString($headerLine) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); // check to ensure proper header type for this factory if (strtolower($name) !== 'subject') { throw new Exception\InvalidArgumentException('Invalid header line for Subject string'); } $header = new static(); $header->setSubject($value); return $header; }
public static function fromString($headerLine) { list($fieldName, $fieldValue) = GenericHeader::splitHeaderLine($headerLine); $decodedValue = HeaderWrap::mimeDecodeValue($fieldValue); $wasEncoded = $decodedValue !== $fieldValue; $fieldValue = $decodedValue; if (strtolower($fieldName) !== static::$type) { throw new Exception\InvalidArgumentException(sprintf('Invalid header line for "%s" string', __CLASS__)); } $header = new static(); if ($wasEncoded) { $header->setEncoding('UTF-8'); } // split value on "," $fieldValue = str_replace(Headers::FOLDING, ' ', $fieldValue); $values = explode(',', $fieldValue); array_walk($values, function (&$value) { $value = trim($value); }); $addressList = $header->getAddressList(); foreach ($values as $address) { // split values into name/email if (!preg_match('/^((?P<name>.*?)<(?P<namedEmail>[^>]+)>|(?P<email>.+))$/', $address, $matches)) { // Should we raise an exception here? continue; } $name = null; if (isset($matches['name'])) { $name = trim($matches['name']); } if (empty($name)) { $name = null; } if (isset($matches['namedEmail'])) { $email = $matches['namedEmail']; } if (isset($matches['email'])) { $email = $matches['email']; } $email = trim($email); // we may have leading whitespace // populate address list $addressList->add($email, $name); } return $header; }
public static function fromString($headerLine) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); // check to ensure proper header type for this factory if (strtolower($name) !== 'sender') { throw new Exception\InvalidArgumentException('Invalid header line for Sender string'); } $header = new static(); $senderName = ''; $senderEmail = ''; // Check for address, and set if found if (preg_match('/^(?P<name>.*?)<(?P<email>[^>]+)>$/', $value, $matches)) { $senderName = trim($matches['name']); if (empty($senderName)) { $senderName = null; } $senderEmail = $matches['email']; } $header->setAddress($senderEmail, $senderName); return $header; }
public static function fromString($headerLine) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); // check to ensure proper header disposition for this factory if (strtolower($name) !== 'content-disposition') { throw new InvalidArgumentException('Invalid header line for Content-Disposition string'); } $value = str_replace(Headers::FOLDING, ' ', $value); $values = preg_split('#\\s*;\\s*#', $value); $disposition = array_shift($values); $header = new static(); $header->setDisposition($disposition); // Remove empty values $values = array_filter($values); foreach ($values as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair, 2); $value = trim($value, "'\" \t\n\r\v"); $header->addParameter($key, $value); } return $header; }
public static function fromString($headerLine) { $decodedLine = iconv_mime_decode($headerLine, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); list($name, $value) = GenericHeader::splitHeaderLine($decodedLine); // check to ensure proper header type for this factory if (strtolower($name) !== 'sender') { throw new Exception\InvalidArgumentException('Invalid header line for Sender string'); } $header = new static(); if ($decodedLine != $headerLine) { $header->setEncoding('UTF-8'); } // Check for address, and set if found if (preg_match('/^(?P<name>.*?)<(?P<email>[^>]+)>$/', $value, $matches)) { $name = $matches['name']; if (empty($name)) { $name = null; } else { $name = iconv_mime_decode($name, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); } $header->setAddress($matches['email'], $name); } return $header; }
public static function fromString($headerLine) { $decodedLine = iconv_mime_decode($headerLine, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); // split into name/value list($fieldName, $fieldValue) = GenericHeader::splitHeaderLine($decodedLine); if (strtolower($fieldName) !== static::$type) { throw new Exception\InvalidArgumentException(sprintf('Invalid header line for "%s" string', __CLASS__)); } $header = new static(); if ($decodedLine != $headerLine) { $header->setEncoding('UTF-8'); } // split value on "," $fieldValue = str_replace(Headers::FOLDING, ' ', $fieldValue); $values = str_getcsv($fieldValue, ','); array_walk($values, function (&$value) { $value = trim($value); }); $addressList = $header->getAddressList(); foreach ($values as $address) { $addressList->addFromString($address); } return $header; }
/** * Add a raw header line, either in name => value, or as a single string 'name: value' * * This method allows for lazy-loading in that the parsing and instantiation of HeaderInterface object * will be delayed until they are retrieved by either get() or current() * * @throws Exception\InvalidArgumentException * @param string $headerFieldNameOrLine * @param string $fieldValue optional * @return Headers */ public function addHeaderLine($headerFieldNameOrLine, $fieldValue = null) { if (!is_string($headerFieldNameOrLine)) { throw new Exception\InvalidArgumentException(sprintf('%s expects its first argument to be a string; received "%s"', is_object($headerFieldNameOrLine) ? get_class($headerFieldNameOrLine) : gettype($headerFieldNameOrLine))); } if ($fieldValue === null) { $this->addHeader(Header\GenericHeader::fromString($headerFieldNameOrLine)); } elseif (is_array($fieldValue)) { foreach ($fieldValue as $i) { $this->addHeader(new Header\GenericMultiHeader($headerFieldNameOrLine, $i)); } } else { $this->addHeader(new Header\GenericHeader($headerFieldNameOrLine, $fieldValue)); } return $this; }
/** * @dataProvider getEmbeddedContentIdProvider * @param $rawHeaders * @param $expected */ public function testGetEmbeddedContentId($rawHeaders, $expected) { $headers = Headers::fromString(implode(PHP_EOL, $rawHeaders), PHP_EOL); $contentIdHeader = null; $contentDispositionHeader = null; if (isset($rawHeaders['Content-ID'])) { $contentIdHeader = GenericHeader::fromString($rawHeaders['Content-ID']); } if (isset($rawHeaders['Content-Disposition'])) { $contentDispositionHeader = GenericHeader::fromString($rawHeaders['Content-Disposition']); } $this->part->expects($this->any())->method('getHeader')->willReturnMap([['Content-ID', null, $contentIdHeader], ['Content-Disposition', null, $contentDispositionHeader]]); $this->part->expects($this->any())->method('getHeaders')->willReturn($headers); $this->assertEquals($expected, $this->attachment->getEmbeddedContentId()); }
/** * Get the message subject header value * * @return null|string */ public function addCustomeHeader($FieldName, $FieldValue) { $headers = $this->getHeaders(); if (!$headers->has($FieldName)) { $header = new Header\GenericHeader(); $header->setFieldName($FieldName); $headers->addHeader($header); } else { $header = $headers->get($FieldName); } $header->setFieldValue($FieldValue); return $this; }
/** * Create Header object from header line * * @param string $headerLine * @return Header\HeaderInterface|Header\HeaderInterface[] */ public function loadHeader($headerLine) { list($name, ) = Header\GenericHeader::splitHeaderLine($headerLine); $class = $this->getPluginClassLoader()->load($name) ?: Header\GenericHeader::class; return $class::fromString($headerLine); }