composer package updates
[openemr.git] / vendor / zendframework / zend-mail / src / Header / Sender.php
blob6c5a77b2bf354fb9105b549a8b0b60fcd223a0d9
1 <?php
2 /**
3 * @see https://github.com/zendframework/zend-mail for the canonical source repository
4 * @copyright Copyright (c) 2005-2018 Zend Technologies USA Inc. (https://www.zend.com)
5 * @license https://github.com/zendframework/zend-mail/blob/master/LICENSE.md New BSD License
6 */
8 namespace Zend\Mail\Header;
10 use Zend\Mail;
11 use Zend\Mime\Mime;
13 /**
14 * Sender header class methods.
16 * @see https://tools.ietf.org/html/rfc2822 RFC 2822
17 * @see https://tools.ietf.org/html/rfc2047 RFC 2047
19 class Sender implements HeaderInterface
21 /**
22 * @var \Zend\Mail\Address\AddressInterface
24 protected $address;
26 /**
27 * Header encoding
29 * @var null|string
31 protected $encoding;
33 public static function fromString($headerLine)
35 list($name, $value) = GenericHeader::splitHeaderLine($headerLine);
36 $value = HeaderWrap::mimeDecodeValue($value);
38 // check to ensure proper header type for this factory
39 if (strtolower($name) !== 'sender') {
40 throw new Exception\InvalidArgumentException('Invalid header name for Sender string');
43 $header = new static();
45 /**
46 * matches the header value so that the email must be enclosed by < > when a name is present
47 * 'name' and 'email' capture groups correspond respectively to 'display-name' and 'addr-spec' in the ABNF
48 * @see https://tools.ietf.org/html/rfc5322#section-3.4
50 $hasMatches = preg_match(
51 '/^(?:(?P<name>.+)\s)?(?(name)<|<?)(?P<email>[^\s]+?)(?(name)>|>?)$/',
52 $value,
53 $matches
56 if ($hasMatches !== 1) {
57 throw new Exception\InvalidArgumentException('Invalid header value for Sender string');
60 $senderName = trim($matches['name']);
62 if (empty($senderName)) {
63 $senderName = null;
66 $header->setAddress($matches['email'], $senderName);
68 return $header;
71 public function getFieldName()
73 return 'Sender';
76 public function getFieldValue($format = HeaderInterface::FORMAT_RAW)
78 if (! $this->address instanceof Mail\Address\AddressInterface) {
79 return '';
82 $email = sprintf('<%s>', $this->address->getEmail());
83 $name = $this->address->getName();
85 if (! empty($name)) {
86 if ($format == HeaderInterface::FORMAT_ENCODED) {
87 $encoding = $this->getEncoding();
88 if ('ASCII' !== $encoding) {
89 $name = HeaderWrap::mimeEncodeValue($name, $encoding);
92 $email = sprintf('%s %s', $name, $email);
95 return $email;
98 public function setEncoding($encoding)
100 $this->encoding = $encoding;
101 return $this;
104 public function getEncoding()
106 if (! $this->encoding) {
107 $this->encoding = Mime::isPrintable($this->getFieldValue(HeaderInterface::FORMAT_RAW))
108 ? 'ASCII'
109 : 'UTF-8';
112 return $this->encoding;
115 public function toString()
117 return 'Sender: ' . $this->getFieldValue(HeaderInterface::FORMAT_ENCODED);
121 * Set the address used in this header
123 * @param string|\Zend\Mail\Address\AddressInterface $emailOrAddress
124 * @param null|string $name
125 * @throws Exception\InvalidArgumentException
126 * @return Sender
128 public function setAddress($emailOrAddress, $name = null)
130 if (is_string($emailOrAddress)) {
131 $emailOrAddress = new Mail\Address($emailOrAddress, $name);
132 } elseif (! $emailOrAddress instanceof Mail\Address\AddressInterface) {
133 throw new Exception\InvalidArgumentException(sprintf(
134 '%s expects a string or AddressInterface object; received "%s"',
135 __METHOD__,
136 (is_object($emailOrAddress) ? get_class($emailOrAddress) : gettype($emailOrAddress))
139 $this->address = $emailOrAddress;
140 return $this;
144 * Retrieve the internal address from this header
146 * @return \Zend\Mail\Address\AddressInterface|null
148 public function getAddress()
150 return $this->address;