private function parse($uri)
	{
		$parts = parse_url($uri);

		if ($parts === false)
			throw new \InvalidArgumentException("The source URI `{$uri}` appears to be malformed");

		//	special handling of mailto: scheme
		if (($parts['scheme'] ?? null) === 'mailto')
		{
			if (isset($parts['host']) || isset($parts['user']) || isset($parts['pass']) || isset($parts['fragment']) || isset($parts['query']) || isset($parts['port']) || empty($parts['path']) || $parts['path'][0] === '/')
				throw new \InvalidArgumentException("The source email address `{$uri}` appears to be malformed");

			$parts = parse_url('mailto://' . $parts['path']);	//	we 'fool' the parser by adding '//' before the email address, this allows parse_url() to detect the 'authority` components (user@domain)

			if ($parts === false)
				throw new \InvalidArgumentException("The source email address `{$uri}` appears to be malformed");
		}

		$this->fromArray($parts);
	}