мне нужно иметь домен, имя пользователя и доменную зону.
А насколько важно соответствовать многочисленным RFC в данном случае? Логика подсказывает, что можно просто explode() по "@", тогда левая часть будет именем пользователя, а если правую еще разделить на две части по предпоследней точке, получится домен и все остальное. Но
всем RFC это соответствовать не будет как минимум из-за того, что знак "+" не учтен в левой части. С другой стороны, если и его учесть, то что останется из проблем?