One solution is shown by @Magoo.
You need three carets, as first the complete line will be parsed and the carets escapes to the string:
echo mail from:^<email@gmail.com^> | clip
As the first caret escapes the second and the third escapes the redirection character.
Then the pipe creates two new instances of cmd.exe for both sides.
In both cmd.exe the partial commands are parsed a second time.
You need three carets as the batch parser parses the line two times.
(The space is only for better visualization)
echo ^^ ^< | clip
===>
echo ^ < | clip
===>
echo < | clip
The same with two carets would work completly different
echo ^^ < | clip
===>
failure as the < wouldn't be escaped and works as redirection
Another way
To avoid tripple carets you could also use percent variable expansion like
set "text=echo mail from:^<email@gmail.com^>"
echo %%text%% | clip
It's nearly the same effect, in the batch file the double percents are reduced to a single percent and in the pipe cmd instance the echo %text%
will be expanded and then the single carets escapes the redirection characters
For more interessting samples you could look at
Why does delayed expansion fail when inside a piped block of code?