<?php

$text = "Все работает только когда перед адресом есть какие-нибудь символы. Например:
test@test.com - не работает
test test@test.com - работает";

$text = preg_replace("#(^|[\n ])([\w0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#iu", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text);

echo $text;