aboutsummaryrefslogtreecommitdiff
path: root/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2021-10-15 09:52:00 +1100
committerYuchen Pei <hi@ypei.me>2021-10-15 09:52:00 +1100
commit71b0e901f5fb1cfcd162d8acc23120d3f77a3152 (patch)
tree323c00faef1edc7dea2e88ff581cc2258b2b6432 /External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
parent72cce24864b064b5762f4fe97fdf40d8d2ad4b51 (diff)
parent07f5140771388c9e0c8a99b0dd2e5d950bdb173b (diff)
Merge branch 'development' into h-node
Diffstat (limited to 'External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php')
-rwxr-xr-xExternal/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php316
1 files changed, 316 insertions, 0 deletions
diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
new file mode 100755
index 0000000..77d3bba
--- /dev/null
+++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
@@ -0,0 +1,316 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2004-2009 Chris Corbyn
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+//@require 'Swift/Mime/Headers/AbstractHeader.php';
+//@require 'Swift/Mime/HeaderEncoder.php';
+
+/**
+ * A Mailbox Address MIME Header for something like From or Sender.
+ * @package Swift
+ * @subpackage Mime
+ * @author Chris Corbyn
+ */
+class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
+{
+
+ /**
+ * The mailboxes used in this Header.
+ * @var string[]
+ * @access private
+ */
+ private $_mailboxes = array();
+
+ /**
+ * Creates a new MailboxHeader with $name.
+ * @param string $name of Header
+ * @param Swift_Mime_HeaderEncoder $encoder
+ */
+ public function __construct($name, Swift_Mime_HeaderEncoder $encoder)
+ {
+ $this->setFieldName($name);
+ $this->setEncoder($encoder);
+ $this->initializeGrammar();
+ }
+
+ /**
+ * Get the type of Header that this instance represents.
+ * @return int
+ * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
+ * @see TYPE_DATE, TYPE_ID, TYPE_PATH
+ */
+ public function getFieldType()
+ {
+ return self::TYPE_MAILBOX;
+ }
+
+ /**
+ * Set the model for the field body.
+ * This method takes a string, or an array of addresses.
+ * @param mixed $model
+ * @throws Swift_RfcComplianceException
+ */
+ public function setFieldBodyModel($model)
+ {
+ $this->setNameAddresses($model);
+ }
+
+ /**
+ * Get the model for the field body.
+ * This method returns an associative array like {@link getNameAddresses()}
+ * @return array
+ * @throws Swift_RfcComplianceException
+ */
+ public function getFieldBodyModel()
+ {
+ return $this->getNameAddresses();
+ }
+
+ /**
+ * Set a list of mailboxes to be shown in this Header.
+ * The mailboxes can be a simple array of addresses, or an array of
+ * key=>value pairs where (email => personalName).
+ * Example:
+ * <code>
+ * <?php
+ * //Sets two mailboxes in the Header, one with a personal name
+ * $header->setNameAddresses(array(
+ * 'chris@swiftmailer.org' => 'Chris Corbyn',
+ * 'mark@swiftmailer.org' //No associated personal name
+ * ));
+ * ?>
+ * </code>
+ * @param string|string[] $mailboxes
+ * @throws Swift_RfcComplianceException
+ * @see __construct()
+ * @see setAddresses()
+ * @see setValue()
+ */
+ public function setNameAddresses($mailboxes)
+ {
+ $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes);
+ $this->setCachedValue(null); //Clear any cached value
+ }
+
+ /**
+ * Get the full mailbox list of this Header as an array of valid RFC 2822 strings.
+ * Example:
+ * <code>
+ * <?php
+ * $header = new Swift_Mime_Headers_MailboxHeader('From',
+ * array('chris@swiftmailer.org' => 'Chris Corbyn',
+ * 'mark@swiftmailer.org' => 'Mark Corbyn')
+ * );
+ * print_r($header->getNameAddressStrings());
+ * // array (
+ * // 0 => Chris Corbyn <chris@swiftmailer.org>,
+ * // 1 => Mark Corbyn <mark@swiftmailer.org>
+ * // )
+ * ?>
+ * </code>
+ * @return string[]
+ * @throws Swift_RfcComplianceException
+ * @see getNameAddresses()
+ * @see toString()
+ */
+ public function getNameAddressStrings()
+ {
+ return $this->_createNameAddressStrings($this->getNameAddresses());
+ }
+
+ /**
+ * Get all mailboxes in this Header as key=>value pairs.
+ * The key is the address and the value is the name (or null if none set).
+ * Example:
+ * <code>
+ * <?php
+ * $header = new Swift_Mime_Headers_MailboxHeader('From',
+ * array('chris@swiftmailer.org' => 'Chris Corbyn',
+ * 'mark@swiftmailer.org' => 'Mark Corbyn')
+ * );
+ * print_r($header->getNameAddresses());
+ * // array (
+ * // chris@swiftmailer.org => Chris Corbyn,
+ * // mark@swiftmailer.org => Mark Corbyn
+ * // )
+ * ?>
+ * </code>
+ * @return string[]
+ * @see getAddresses()
+ * @see getNameAddressStrings()
+ */
+ public function getNameAddresses()
+ {
+ return $this->_mailboxes;
+ }
+
+ /**
+ * Makes this Header represent a list of plain email addresses with no names.
+ * Example:
+ * <code>
+ * <?php
+ * //Sets three email addresses as the Header data
+ * $header->setAddresses(
+ * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld')
+ * );
+ * ?>
+ * </code>
+ * @param string[] $addresses
+ * @throws Swift_RfcComplianceException
+ * @see setNameAddresses()
+ * @see setValue()
+ */
+ public function setAddresses($addresses)
+ {
+ return $this->setNameAddresses(array_values((array) $addresses));
+ }
+
+ /**
+ * Get all email addresses in this Header.
+ * @return string[]
+ * @see getNameAddresses()
+ */
+ public function getAddresses()
+ {
+ return array_keys($this->_mailboxes);
+ }
+
+ /**
+ * Remove one or more addresses from this Header.
+ * @param string|string[] $addresses
+ */
+ public function removeAddresses($addresses)
+ {
+ $this->setCachedValue(null);
+ foreach ((array) $addresses as $address)
+ {
+ unset($this->_mailboxes[$address]);
+ }
+ }
+
+ /**
+ * Get the string value of the body in this Header.
+ * This is not necessarily RFC 2822 compliant since folding white space will
+ * not be added at this stage (see {@link toString()} for that).
+ * @return string
+ * @throws Swift_RfcComplianceException
+ * @see toString()
+ */
+ public function getFieldBody()
+ {
+ //Compute the string value of the header only if needed
+ if (is_null($this->getCachedValue()))
+ {
+ $this->setCachedValue($this->createMailboxListString($this->_mailboxes));
+ }
+ return $this->getCachedValue();
+ }
+
+ // -- Points of extension
+
+ /**
+ * Normalizes a user-input list of mailboxes into consistent key=>value pairs.
+ * @param string[] $mailboxes
+ * @return string[]
+ * @access protected
+ */
+ protected function normalizeMailboxes(array $mailboxes)
+ {
+ $actualMailboxes = array();
+
+ foreach ($mailboxes as $key => $value)
+ {
+ if (is_string($key)) //key is email addr
+ {
+ $address = $key;
+ $name = $value;
+ }
+ else
+ {
+ $address = $value;
+ $name = null;
+ }
+ $this->_assertValidAddress($address);
+ $actualMailboxes[$address] = $name;
+ }
+
+ return $actualMailboxes;
+ }
+
+ /**
+ * Produces a compliant, formatted display-name based on the string given.
+ * @param string $displayName as displayed
+ * @param boolean $shorten the first line to make remove for header name
+ * @return string
+ * @access protected
+ */
+ protected function createDisplayNameString($displayName, $shorten = false)
+ {
+ return $this->createPhrase($this, $displayName,
+ $this->getCharset(), $this->getEncoder(), $shorten
+ );
+ }
+
+ /**
+ * Creates a string form of all the mailboxes in the passed array.
+ * @param string[] $mailboxes
+ * @return string
+ * @throws Swift_RfcComplianceException
+ * @access protected
+ */
+ protected function createMailboxListString(array $mailboxes)
+ {
+ return implode(', ', $this->_createNameAddressStrings($mailboxes));
+ }
+
+ // -- Private methods
+
+ /**
+ * Return an array of strings conforming the the name-addr spec of RFC 2822.
+ * @param string[] $mailboxes
+ * @return string[]
+ * @access private
+ */
+ private function _createNameAddressStrings(array $mailboxes)
+ {
+ $strings = array();
+
+ foreach ($mailboxes as $email => $name)
+ {
+ $mailboxStr = $email;
+ if (!is_null($name))
+ {
+ $nameStr = $this->createDisplayNameString($name, empty($strings));
+ $mailboxStr = $nameStr . ' <' . $mailboxStr . '>';
+ }
+ $strings[] = $mailboxStr;
+ }
+
+ return $strings;
+ }
+
+ /**
+ * Throws an Exception if the address passed does not comply with RFC 2822.
+ * @param string $address
+ * @throws Exception If invalid.
+ * @access protected
+ */
+ private function _assertValidAddress($address)
+ {
+ if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D',
+ $address))
+ {
+ throw new Swift_RfcComplianceException(
+ 'Address in mailbox given [' . $address .
+ '] does not comply with RFC 2822, 3.6.2.'
+ );
+ }
+ }
+
+}