System.Net.Mail.MailAddress'解析器接受的格式是什么?

时间:2009-02-09 13:12:57

标签: .net validation email

我正在使用System.Net.Mail.MailAddress和朋友发送电子邮件的应用。该解析器是实现完整的RFC5322还是子集或什么?关于这个话题,MSDN并不是很乐意。

任何提示都表示赞赏。

2 个答案:

答案 0 :(得分:4)

我写了一个小片段来测试这个功能:

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

我认为验证者在变得无法使用之前不会接受任何更少的验证。

答案 1 :(得分:3)

Dominic Sayers isemail article的讨论主题中,Jerry O'Brien说他阅读了Dominic针对System.Net.MailAddress类的RFC合规性测试案例:

  

System.Net.MailAddress只有59%   符合RFC规范。   后续评论具体说明   它产生错误的情况   积极和假阴性。

RFC对于有效的电子邮件地址构成极其微弱。它们允许一系列不寻常和不受欢迎的格式。所以我想真正的问题是,System.Net.MailAddress在大多数现实世界中是否足够好?