Kann ich die Validierung der E-Mail-Adresse in System.Net.Mail deaktivieren?

8

Ich versuche mit einer Fax-Server-Software per E-Mail zu kommunizieren. Der Faxserver akzeptiert formatierte SMTP-Mails und wandelt sie in Faxe um und sendet sie an die in der Adresse angegebene Faxnummer. Dies wurde manuell getestet, indem eine E-Mail von Outlook über denselben Server gesendet wurde.

Hier ist mein Problem - System.Net.Mail wirft ein      System.FormatException: The specified string is not in the form required for an e-mail address. Ausnahme aufgrund des Formats der E-Mail-Adresse, die ich an

senden möchte

Gibt es eine Möglichkeit, diese Validierung zu deaktivieren / zu ändern, da die E-Mail-Adresse möglicherweise nicht RFC-kompatibel ist, aber funktioniert, wenn die E-Mail gesendet wird

d. Ich möchte [RFax: Benutzer @ / FN = 0123456789] einschließlich der eckigen Klammern

senden

Sie können dies als eine E-Mail-Adresse in Outlook

senden

Prost Chris

BEARBEITEN

Dies ist eine abgespeckte Version der Klasse, die ich benutze, um die Validierung zu umgehen. Es gibt zwei Möglichkeiten, dies zu tun: Zum einen durch Überschreiben des Konstruktors und direktes Setzen des internen Attributs, zum anderen durch Verwendung eines internen Konstruktors. Sie haben leicht unterschiedliche Auswirkungen, wenn Leerzeichen in der E-Mail-Adresse

vorhanden sind %Vor%     
Chris Gill 02.06.2011, 15:47
quelle

4 Antworten

7

Nein, Sie können diese Validierung nicht deaktivieren.

BEARBEITEN:

Nachdem wir uns ein wenig umgeschaut haben, scheint es, als wäre das folgende Code-Snippet eine praktikable Lösung:

%Vor%

Hier gibt es zwei Tricks. Die erste besteht darin, den internen Konstruktor MailAddress zu verwenden, der die angegebene Adresse nicht analysiert / validiert.

Der zweite Trick besteht darin, "fax address" auf dem @ -Zeichen aufzuteilen und als zwei Teile zu übergeben ( user und domain ). Dies ist erforderlich, da der SMTP-To-Header später vom Framework mithilfe der MailAddress.Address -Eigenschaft geschrieben wird und diese Eigenschaft user + @ + Domäne zurückgibt.

    
Mårten Wikström 02.06.2011, 16:04
quelle
2

Einige Gedanken ...

  • RFC 5322 erfordert, dass die E-Mail-Adresse in der Form local- Teil @ Domäne . Sie haben den @domain Teil weggelassen.

  • RFC 5322 erfordert außerdem, dass local-part ein% ist co_de%, bestehend aus 1 oder mehr dot-atom , getrennt durch eine einzelne Periode (zB atoms oder foo ). Eine einzelne foo.bar ist eine Folge von 1 oder mehr der folgenden Zeichen, die aus dem US-ASCII (7-Bit) -Zeichensatz von druckbaren US-ASCII-Zeichen gezogen wurden, ausgenommen "Specials": Groß- / Kleinbuchstaben, Ziffern und die Zeichen

    %Vor%

    Nach dem RFC ist Ihre E-Mail-Adresse absolut nicht legal - eckige Klammern sind "specials" in der Grammatik und somit nicht erlaubt.

    Wenn Sie etwas anderes als atom als dot-atom verwenden möchten, muss es ein local-part sein, das als anfängliche doppelte Anführungszeichen ( quoted-string ) gefolgt von " definiert wird. , gefolgt von einem Lead-Out-Double-Quote ( quoted-content ). " ist null oder mehr druckbare US-ASCII-Zeichen im Bereich 0x21-0x7E, mit Ausnahme von quoted-content und " . \ kann auch unbedeutende "faltbare Leerzeichen" enthalten. quoted-content , \ und Leerzeichen können eingeschlossen werden, indem sie mit einem " entfernt werden (z. B. werden Anführungszeichen in der Zeichenfolge in Anführungszeichen als \ , Backslashes als \" und Leerzeichen als \ dargestellt.

Hoffe, das hilft!

Bearbeitet zu Hinweis: Eine andere Option wäre, die E-Mail direkt über Exchange und nicht über das SMTP-Frontend zu senden, indem Sie die vom Exchange Server bereitgestellten Webdienste verwenden: Ссылка .

    
Nicholas Carey 02.06.2011 17:29
quelle
1

Es gibt einige Open-Source-SMTP-Clients für .Net. Die meisten sind alt und abgestanden, aber Sie könnten einfach Ihre eigenen basierend auf ihnen rollen, wie DotNetOpenMail

    
ericvg 02.06.2011 16:19
quelle
0

Also, es scheint, dass Sie Diem Mail-to-Fax (PDF Handbuch). Beachten Sie, dass die einfachste Methode dies ist, indem Sie den Abschnitt "SMTP IETF Adressierung" verwenden, der einfach einen MX-Eintrag für fax.company.com und SMTP-konforme Adressen wie:

%Vor%

Sie können dann diese Faxe von jedem Client aus senden, ohne Ihren Exchange-Server durchsuchen zu müssen.

Das RFAX -Schema erfordert spezielle Unterstützung von Ihrem Exchange-Server für die Weiterleitung an das Faxgerät. Da Outlook Mail über MAPI übermittelt, kann es diese zusätzlichen Adressräume unterstützen. Ich bin nicht ganz sicher, dass, selbst wenn Sie das SmtpClient erhalten können, Ihre Adresse zu akzeptieren, dass Exchange weiß, was damit zu tun ist, wenn es über SMTP geliefert wird.

Ich vermute, dass Sie, um das RFAX-Schema zu verwenden, die E-Mail über MAPI oder Web Services einreichen müssen, da es sich nicht um eine SMTP-Adresse handelt.

    
Mark Brackett 01.03.2016 16:34
quelle

Tags und Links