2009-02-09 60 views
7

我正在使用System.Net.Mail.MailAddress和朋友發送電子郵件的應用程序。該解析器是否實現完整RFC5322或子集或什麼?關於這個話題,MSDN並不是非常歡迎。什麼是System.Net.Mail.MailAddress的解析器接受的格式?

任何提示讚賞。

+0

獲取並安裝RedGate的Reflector,然後導航到System.Net.Mail命名空間並查看代碼以查看它的功能。我會這樣做,但我現在在家裏在我的Mac上。 – tvanfosson 2009-02-09 13:30:26

+3

也許我很奇怪,但我寧願看到一個文檔(最好由MS或ECMA)說明該死的事情「接受除了X,Y和Z節之外的RFCsuch-and-so地址,因爲IETF不知道關於互聯網「,而不是不得不拆開這個東西。 – 2009-02-09 13:53:11

回答

4

我已經寫了一個小片段來測試功能:

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

隨着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] 

此外,它似乎並不支持「引用字符串「本地部分,如"blah"@example.com

我認爲驗證者在變得無法使用之前可以接受的更少。

3

在上Dominic Sayers isemail article話題,傑里奧布萊恩說,他讀了多米尼克的RFC符合性測試的情況下對System.Net.MailAddress類:

System.Net.MailAddress只有59% 符合RFC的規格。 後續評論注意到具體的 案件,其中它產生了假 積極和假陰性。

對於什麼構成有效的電子郵件地址,RFC非常薄弱。他們允許一系列不尋常和不受歡迎的格式。所以我想真正的問題是,在大多數現實世界中,System.Net.MailAddress是否足夠好?