Exemplo n.º 1
0
 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;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 9
0
 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;
 }
Exemplo n.º 10
0
 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;
 }
Exemplo n.º 11
0
 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;
 }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 13
0
 /**
  * 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;
 }
Exemplo n.º 14
0
 /**
  * @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());
 }
Exemplo n.º 15
0
 /**
  * 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;
 }
Exemplo n.º 16
0
 /**
  * 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);
 }