Cleaning up cut and pasted outlook email addresses
You can use a recursive common table expression to iterate through the string variable:

DECLARE @outlook nvarchar(max)='Something.something@email.com;Anne Hathaway &lt; Anne.Hathaway@Email.com &gt;; Albert Einstein &lt; Albert.Einstein@email.com &gt;; Ash Ketchum &lt; Ash.Ketchum@mail.com &gt;';

WITH semi AS (
    SELECT CAST(NULL AS nvarchar(255)) AS part, @outlook AS remain
    UNION ALL
    SELECT CAST(LEFT(remain, CHARINDEX(';', remain+';')-1) AS nvarchar(255)),
           CAST(SUBSTRING(remain, CHARINDEX(';', remain+';')+1, LEN(remain)) AS nvarchar(max))
    FROM semi
    WHERE remain!='')

SELECT +LEFT(addr, CHARINDEX('&gt;', addr+'&gt;')-1)
FROM (
    SELECT LTRIM(SUBSTRING(part, CHARINDEX('&lt;', part)+1, LEN(part))) AS addr
    FROM semi
    WHERE part IS NOT NULL
    ) AS sub;


Ok, so what's going on here is that the "semi" common table expression splits the string using the semicolon character (and if one of your names has a semicolon in it, you're out of luck).

Once we've split every name/address into its own row, the bottom SELECT gets only the string between the &lt; and &gt; characters.

If you want to go a little crazy with it, you could use XML parsing to concatenate all those lines back on a single row:

WITH semi AS (
    SELECT CAST(NULL AS nvarchar(255)) AS part, @outlook AS remain
    UNION ALL
    SELECT CAST(LEFT(remain, CHARINDEX(';', remain+';')-1) AS nvarchar(255)),
           CAST(SUBSTRING(remain, CHARINDEX(';', remain+';')+1, LEN(remain)) AS nvarchar(max))
    FROM semi
    WHERE remain!='')

SELECT SUBSTRING(CAST((
    SELECT '; '+LEFT(addr, CHARINDEX('&gt;', addr+'&gt;')-1)
    FROM (
        SELECT LTRIM(SUBSTRING(part, CHARINDEX('&lt;', part)+1, LEN(part))) AS addr
        FROM semi
        WHERE part IS NOT NULL
        ) AS sub
    FOR XML PATH(''), TYPE) AS nvarchar(max)), 3, 10000);


To round off the answer, if you have access to a SQL Server 2017 instance, this is just a few lines of code:

SELECT STRING_AGG(RTRIM(LTRIM(REPLACE(REPLACE(b.[value], '&lt;', ''), '&gt;', ''))), '; ')
FROM STRING_SPLIT(@outlook, ';') AS a
CROSS APPLY STRING_SPLIT(a.[value], ' ') AS b
WHERE b.[value] LIKE '%@%';