parseEmailAddresses($sEmailAddresses); } } public static function NewInstance(string $sEmailAddresses = '') : self { return new self($sEmailAddresses); } public function append(Email $oEmail, bool $bToTop = false) : void { parent::append($oEmail, $bToTop); } public static function Parse(string $sEmailAddresses) : self { return self::NewInstance($sEmailAddresses); } public function ToArray() : array { $aReturn = array(); foreach ($this as $oEmail) { $aReturn[] = $oEmail->ToArray(); } return $aReturn; } public function MergeWithOtherCollection(EmailCollection $oEmails) : self { foreach ($oEmails as $oEmail) { $this->append($oEmail); } return $this; } public function Unique() : self { $aReturn = array(); foreach ($this as $oEmail) { $sEmail = $oEmail->GetEmail(); if (!isset($aReturn[$sEmail])) { $aReturn[$sEmail] = $oEmail; } } $this->exchangeArray(array_values($aReturn)); return $this; } public function ToString(bool $bConvertSpecialsName = false, bool $bIdn = false) : string { $aReturn = array(); foreach ($this as $oEmail) { $aReturn[] = $oEmail->ToString($bConvertSpecialsName, $bIdn); } return \implode(', ', $aReturn); } private function parseEmailAddresses(string $sRawEmails) : self { $this->Clear(); $sWorkingRecipients = \trim($sRawEmails); if (0 === \strlen($sWorkingRecipients)) { return $this; } $iEmailStartPos = 0; $iEmailEndPos = 0; $bIsInQuotes = false; $sChQuote = '"'; $bIsInAngleBrackets = false; $bIsInBrackets = false; $iCurrentPos = 0; $sWorkingRecipientsLen = \strlen($sWorkingRecipients); while ($iCurrentPos < $sWorkingRecipientsLen) { switch ($sWorkingRecipients[$iCurrentPos]) { case '\'': case '"': if (!$bIsInQuotes) { $sChQuote = $sWorkingRecipients[$iCurrentPos]; $bIsInQuotes = true; } else if ($sChQuote == $sWorkingRecipients[$iCurrentPos]) { $bIsInQuotes = false; } break; case '<': if (!$bIsInAngleBrackets) { $bIsInAngleBrackets = true; if ($bIsInQuotes) { $bIsInQuotes = false; } } break; case '>': if ($bIsInAngleBrackets) { $bIsInAngleBrackets = false; } break; case '(': if (!$bIsInBrackets) { $bIsInBrackets = true; } break; case ')': if ($bIsInBrackets) { $bIsInBrackets = false; } break; case ',': case ';': if (!$bIsInAngleBrackets && !$bIsInBrackets && !$bIsInQuotes) { $iEmailEndPos = $iCurrentPos; try { $this->append( Email::Parse(\substr($sWorkingRecipients, $iEmailStartPos, $iEmailEndPos - $iEmailStartPos)) ); $iEmailStartPos = $iCurrentPos + 1; } catch (\MailSo\Base\Exceptions\InvalidArgumentException $oException) { } } break; } $iCurrentPos++; } if ($iEmailStartPos < $iCurrentPos) { try { $this->append( Email::Parse(\substr($sWorkingRecipients, $iEmailStartPos, $iCurrentPos - $iEmailStartPos)) ); } catch (\MailSo\Base\Exceptions\InvalidArgumentException $oException) {} } return $this; } }