2015-04-07 9 views
8

Um die E-Mail-Adresse zu validieren, geben wir MailAddress Class weiter. Diese E-Mail-Adresse a @ bbb..com scheint jedoch gemäß der MailAddress-Klasse gültig zu sein.Ist es "a @ bbb..com" eine gültige E-Mail-Adresse ?, Gemäß MailAddress-Klasse ist es

MSDN besagt, dass dies sind gültige E-Mail-Adresse:

Die Mailaddress-Klasse unterstützt die folgenden E-Mail-Adressformate:

  • Eine einfache Adressformat von user @ host. Wenn ein DisplayName nicht festgelegt ist, wird das Mail-Adressformat generiert.
  • Ein Standardformat für den Anzeigenamen von "Anzeigename". Wenn ein DisplayName festgelegt ist, ist dies das generierte Format.
  • Um den Benutzernamen, Hostname für "Anzeigename" user @ host, werden spitze Klammern hinzugefügt, wenn diese nicht enthalten sind.
  • Die Anführungszeichen werden um den Anzeigenamen für den Anzeigenamen hinzugefügt, wenn diese nicht enthalten sind.
  • Unicode-Zeichen werden im DisplayName unterstützt. Eigentum.
  • Ein Benutzername mit Anführungszeichen. Zum Beispiel "Benutzername" @host.
  • Aufeinanderfolgende und abschließende Punkte in Benutzernamen. Beispiel: user ... name .. @ host.
  • In Klammern gesetzte Domänenliterale. Beispielsweise, .
  • Kommentare. Zum Beispiel (Kommentar) "Anzeigename" (Kommentar) < (Kommentar) Benutzer (Kommentar) @ (Kommentar) Domäne (Kommentar)> (Kommentar). Kommentare werden vor der Übertragung entfernt.

von https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx genommen.

Beachten Sie, dass 7 Kugel ist in der Nähe dieses Problems, aber es besagt, dass die aufeinander folgenden Punkte im Benutzernamen nicht in der Domäne angezeigt werden können.

Andere Ressourcen wie http://isemail.info (http://isemail.info/[email protected]) besagt, dass dies keine gültige E-Mail-Adresse ist.

Was denken Sie, es sollte das richtige Verhalten sein ?. Hier ist ein Poc.

//C# Example 
var emailAddress = @"[email protected]"; 

Func<string,bool> validEmail = (email)=> 
{ 
    try 
    { 
     var address = new System.Net.Mail.MailAddress(email); 
     return true;  
    }catch (Exception ex) 
    { 
     return false; 
    } 
}; 

Assert.IsTrue(validEmail(emailAddress)); 
//using NUnit.Framework 
//O2Ref:nunit.framework.dll 
+4

Parsing E-Mail-Adressen ist schwer. –

+0

@ DanielA.White absolut :) –

+0

Warum nicht eine Regexp verwenden? – Zee

Antwort

1

Ich denke, (meine persönliche Interpretation von RFC822 mit Hilfe dieses Dokuments https://www.cs.tut.fi/~jkorpela/rfc/822addr.html) die Adresse

[email protected] 

nicht gültig ist nach RFC 822 vor allem seine LEXICAL TOKENS Definition

, wo Sie die Domain Teil der Adresse definiert als

domain  = sub-domain *("." sub-domain) 

sub-domain = domain-ref/domain-literal 

domain-ref = atom 

atom  = 1*<any CHAR except specials, SPACE and CTLs> 

specials = "("/")"/"<"/">"/"@" ; Must be in quoted- 
      /","/";"/":"/"\"/<"> ; string, to use 
      /"."/"["/"]"    ; within a word.  

domain-literal = "[" *(dtext/quoted-pair) "]" 

dtext  = <any CHAR excluding "[",  ; => may be folded 
       "]", "\" & CR, & including 
       linear-white-space> 

linear-white-space = 1*([CRLF] LWSP-char) ; semantics = SPACE 
              ; CRLF => folding 

quoted-pair = "\" CHAR      ; may quote any char 

CHAR  = <any ASCII character>   ; ( 0-177, 0.-127.) 

Das Punkt-Zeichen ist also ein Sonderzeichen und muss in Anführungszeichen gesetzt werden, andernfalls ist es ein Trennzeichen, wie es im Teil 'Domäne' definiert ist.

Nach @dkarp:

Die "." bedeutet, es ist eine wörtliche Punkt, nicht eine andere ABNF Produktion. So ist eine domain in der Regel atom s durch Punkte getrennt, und atom s sind mindestens ein non specials Zeichen in einer Zeile.

+1

_ "so das Punktzeichen ist ein spezielles und muss in Anführungszeichen sein, sonst ist es ein Trennzeichen, wie in der 'Domain' Teil definiert" _ Nein auf diesem Teil. Das "." Bedeutet, dass es ein wörtlicher Punkt ist, keine weitere ABNF-Produktion. Also ist eine "Domäne" im Allgemeinen "Atome", die durch Punkte getrennt sind, und "Atome" sind mindestens ein Nicht-"Speziale" -Zeichen in einer Reihe. – dkarp

+0

Danke .. Zum Verfeinern –

Verwandte Themen