What is the format accepted by System.Net.Mail.MailAddress' parser?

前端 未结 2 2067
礼貌的吻别
礼貌的吻别 2021-02-09 00:57

I\'m working on an app that\'s using System.Net.Mail.MailAddress and friends for sending emails. Does that parser implement the full RFC5322 or a subset or what? The MSDN is not

相关标签:
2条回答
  • 2021-02-09 01:28

    In the discussion thread on Dominic Sayers isemail article, Jerry O'Brien said that he read Dominic's RFC compliance test cases against the System.Net.MailAddress class:

    System.Net.MailAddress is only 59% compliant with the RFC specifications. Follow-up comments noted the specific cases where it generated false positives and false negatives.

    The RFCs are extremely weak on what constitutes a valid email email address. They allow a range of unusual and unpopular formats. So I guess the real question is, is System.Net.MailAddress good enough in a majority of real-world situations?

    0 讨论(0)
  • 2021-02-09 01:40

    I've wrote a little snippet to test the function:

    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);
        }
    }
    

    With the following results on 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
    

    Also it doesn't seem to support "quoted-string" local-parts, like "blah"@example.com.

    I don't think a validator could accept any less before becoming unusable.

    0 讨论(0)
提交回复
热议问题