@tontonsevilla Great solution, I just modified it a bit to remove the intermediate table and replace any line breaks that may show up (as they did from copying your solution):
DECLARE @EmailList VARCHAR(MAX);
SET @EmailList
= 'Jane Doe <DoeJ@xdomain.com>; info.support@mssqltips.com;.info@mssqltips.com;
info..@mssqltips.com;info@mssqltips.c;info@support@mssqltips.com;info.support@mssql_tips.com;
+info@mssqltips.com;info Support@mssqltips.com;info@mssql tips.com;NULL;22@mssqltips.com;@mssqltips.com';
DECLARE @ValidEmailList VARCHAR(MAX);
SELECT @ValidEmailList = COALESCE(@ValidEmailList + ';', '') + [x].[Email]
FROM (
SELECT TRIM(REPLACE(REPLACE([value], CHAR(10), ''), CHAR(13), '')) [Email]
FROM STRING_SPLIT(@EmailList, ';')
WHERE LEN([value]) > 4
AND CHARINDEX(' ', TRIM([value])) = 0
AND TRIM([value])NOT LIKE ('%["(),:;<>\]%')
AND SUBSTRING(TRIM([value]), CHARINDEX('@', TRIM([value])), LEN(TRIM([value])))NOT LIKE ('%[!#$%&*+/=?^`_{|]%')
AND LEFT(TRIM([value]), 1)NOT LIKE ('[-_.+]')
AND RIGHT(TRIM([value]), 1)NOT LIKE ('[-_.+]')
AND TRIM([value])NOT LIKE '%[%'
AND TRIM([value])NOT LIKE '%]%'
AND TRIM([value])NOT LIKE '%@%@%'
AND TRIM([value]) LIKE '_%@_%._%'
) [x];
SELECT @ValidEmailList;