Jan's regex probably isn't working in your case because you may need to add RegexOptions.IgnoreCase parameter to his Regex.Replace(msgText,@"his regex",RegexOptions.IgnoreCase);.
Even though that might make Jan's code work in your case, it is not very good to use because it doesn't take into account any urls that may already exist in the content or querystring parameters or things like that. I have found a bit of code and modified it so that it would both be more accurate and preserve any existing anchor or image tags in the content.
//use it like this
// Setup message info
messageInfo.MessageEmail = txtEmail.Text.Trim();
string msgText = txtMessage.Text.Trim();
messageInfo.MessageText = MakeUrlsActive(msgText);
//you can make this a string extension method by changing the parameter to (this string s) if you'd like.
public static string MakeUrlsActive(string s)
{
//find anchor and image tags already in content and preserve them
Dictionary<string, Match> anchorsAndImages = new Dictionary<string, Match>();
var anchorRegex = new Regex(@"<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>|<img.*?src=[""'](?<imgurl>.*?)[^>]?>");
foreach (Match m in anchorRegex.Matches(s))
{
string g = Guid.NewGuid().ToString();
anchorsAndImages.Add(g,m);
s = s.Replace(m.Value, g);
}
//Finds URLs with no protocol
var urlregex = new Regex(@"\b\({0,1}(?<url>(?<!http://)(www|ftp)\.[^ ,""\s<)]*)\b",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
//Finds URLs with a protocol
var httpurlregex = new Regex(@"\b\({0,1}(?<url>[^>](http://www\.|http://|https://|ftp://)[^,""\s<)]*)\b",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
//Finds email addresses
var emailregex = new Regex(@"\b(?<mail>[a-zA-Z_0-9.-]+\@[a-zA-Z_0-9.-]+\.\w+)\b",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
s = urlregex.Replace(s, " <a href=\"http://${url}\" target=\"_blank\">${url}</a>");
s = httpurlregex.Replace(s, " <a href=\"${url}\" target=\"_blank\">${url}</a>");
s = emailregex.Replace(s, "<a href=\"mailto:${mail}\">${mail}</a>");
//put the anchors back in place
foreach (string key in anchorsAndImages.Keys)
{
s = s.Replace(key, anchorsAndImages[key].Value);
}
return s;
}