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.+)\s)?(?(name)<|[^\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; } /** * @return string */ public function getFieldName() { return 'Sender'; } /** * @inheritDoc */ public function getFieldValue($format = HeaderInterface::FORMAT_RAW) { if (! $this->address instanceof Mail\Address\AddressInterface) { return ''; } $email = sprintf('<%s>', $this->address->getEmail()); $name = $this->address->getName(); if (! empty($name)) { if ($format == HeaderInterface::FORMAT_ENCODED) { $encoding = $this->getEncoding(); if ('ASCII' !== $encoding) { $name = HeaderWrap::mimeEncodeValue($name, $encoding); } } $email = sprintf('%s %s', $name, $email); } return $email; } /** * @param string $encoding * @return self */ public function setEncoding($encoding) { $this->encoding = $encoding; return $this; } /** * @return string */ public function getEncoding() { if (! $this->encoding) { $this->encoding = Mime::isPrintable($this->getFieldValue(HeaderInterface::FORMAT_RAW)) ? 'ASCII' : 'UTF-8'; } return $this->encoding; } /** * @return string */ public function toString() { return 'Sender: ' . $this->getFieldValue(HeaderInterface::FORMAT_ENCODED); } /** * Set the address used in this header * * @param string|AddressInterface $emailOrAddress * @param null|string $name * @throws Exception\InvalidArgumentException * @return Sender */ public function setAddress($emailOrAddress, $name = null) { if (is_string($emailOrAddress)) { $emailOrAddress = new Mail\Address($emailOrAddress, $name); } elseif (! $emailOrAddress instanceof Mail\Address\AddressInterface) { throw new Exception\InvalidArgumentException(sprintf( '%s expects a string or AddressInterface object; received "%s"', __METHOD__, is_object($emailOrAddress) ? $emailOrAddress::class : gettype($emailOrAddress) )); } $this->address = $emailOrAddress; return $this; } /** * Retrieve the internal address from this header * * @return AddressInterface|null */ public function getAddress() { return $this->address; } }