using System.Text.RegularExpressions;
using System.Globalization;
public static void Main()
string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com",
"jones@ms1.proseware.com", "j.@server1.proseware.com",
"j@proseware.com9", "js#internal@proseware.com",
"j_9@[129.126.118.1]", "j..s@proseware.com",
"js*@proseware.com", "js@proseware..com",
"js@proseware.com9", "j.s@server1.proseware.com",
"\"j\\\"s\\\"\"@proseware.com", "js@contoso.中国", "js@contoso.com?" };
foreach (var emailAddress in emailAddresses)
if (IsValidEmail(emailAddress))
Console.WriteLine("Valid: {emailAddress}");
Console.WriteLine("Invalid: {emailAddress}");
public static bool IsValidEmail(string strIn)
if (String.IsNullOrEmpty(strIn))
strIn = Regex.Replace(strIn, @"(@)(.+)$", DomainMapper, RegexOptions.None);
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase);
private static string DomainMapper(Match match)
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
domainName = idn.GetAscii(domainName);
catch (ArgumentException)
return match.Groups[1].Value + domainName;