Reputation: 59356
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 very forthcoming on this topic.
Any hints appreciated.
Upvotes: 8
Views: 2832
Reputation: 41812
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?
Upvotes: 4
Reputation: 59356
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}[email protected]", 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 [email protected] MailAddress failed '"' (34): par.t1"pa.r"[email protected] MailAddress failed '(' (40): par.t1(pa.r([email protected] MailAddress failed ')' (41): par.t1)pa.r)[email protected] MailAddress failed ',' (44): par.t1,pa.r,[email protected] MailAddress failed ':' (58): par.t1:pa.r:[email protected] MailAddress failed ';' (59): par.t1;pa.r;[email protected] MailAddress failed '<' (60): par.t1<pa.r<[email protected] MailAddress failed '>' (62): par.t1>pa.r>[email protected] MailAddress failed '@' (64): [email protected]@[email protected] MailAddress failed '[' (91): par.t1[pa.r[[email protected] MailAddress failed '\' (92): par.t1\pa.r\[email protected] MailAddress failed ']' (93): par.t1]pa.r][email protected] MailAddress failed '⌂' (127): par.t1⌂pa.r⌂[email protected]
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.
Upvotes: 5