Я написал небольшой фрагмент для проверки функции:
foreach (int i in Enumerable.Range(32,128-32))
{
char c = (char)i;
string addr = String.Format("par.t1{0}pa.r{0}t2@example.com", c);
try
{
var mailAddr = new MailAddress(addr);
}
catch
{
Console.WriteLine("MailAddress failed '{0}' ({1}): {2}", c, i, addr);
}
}
Со следующими результатами на 3.5 SP1:
MailAddress failed ' ' (32): par.t1 pa.r t2@example.com
MailAddress failed '"' (34): par.t1"pa.r"t2@example.com
MailAddress failed '(' (40): par.t1(pa.r(t2@example.com
MailAddress failed ')' (41): par.t1)pa.r)t2@example.com
MailAddress failed ',' (44): par.t1,pa.r,t2@example.com
MailAddress failed ':' (58): par.t1:pa.r:t2@example.com
MailAddress failed ';' (59): par.t1;pa.r;t2@example.com
MailAddress failed '<' (60): par.t1<pa.r<t2@example.com
MailAddress failed '>' (62): par.t1>pa.r>t2@example.com
MailAddress failed '@' (64): par.t1@pa.r@t2@example.com
MailAddress failed '[' (91): par.t1[pa.r[t2@example.com
MailAddress failed '\' (92): par.t1\pa.r\t2@example.com
MailAddress failed ']' (93): par.t1]pa.r]t2@example.com
MailAddress failed '⌂' (127): par.t1⌂pa.r⌂t2@example.com
Также кажется, что он не поддерживает локальные части "в кавычках", например "blah"@example.com
.
Я не думаю, что валидатор может принять меньшее, прежде чем станет непригодным для использования.