. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Tools\Email; class Util { static public function parseFromName(string $string): string { $fromName = ''; if ($string && stripos($string, '<') !== false) { /** @var string $replacedString */ $replacedString = preg_replace('/(<.*>)/', '', $string); $fromName = trim($replacedString, '" '); } return $fromName; } static public function parseFromAddress(string $string): string { if (!$string) { return ''; } if (stripos($string, '<') !== false) { $fromAddress = ''; if (preg_match('/<(.*)>/', $string, $matches)) { $fromAddress = trim($matches[1]); } return $fromAddress; } return $string; } static public function stripBodyPlainQuotePart(string $body): string { if (!$body) { return ''; } $lines = preg_split("/\r\n|\n|\r/", $body); if (!is_array($lines)) { return ''; } $endIndex = count($lines) - 1; for ($i = count($lines) - 1; $i >= 0; $i--) { $line = $lines[$i]; if (str_starts_with($line, '>') || $line === '') { $endIndex = $i; continue; } break; } $lines = array_slice($lines, 0, $endIndex); if (count($lines) > 2) { $lastIndex = count($lines) - 1; if (str_ends_with($lines[$lastIndex], ':') && $lines[$lastIndex - 1] === '') { $lines = array_slice($lines, 0, count($lines) - 2); } } return implode("\r\n", $lines); } }