public static function fromString($headerLine) { list($name, $value) = self::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); $header = new static($name, $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); $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) { 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($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) { list($name, $value) = GenericHeader::splitHeaderLine($headerLine); $value = HeaderWrap::mimeDecodeValue($value); // 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($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) !== '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); $header = new static(); $header->setType($type); // 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) { 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; }