E-Mails können nicht an Adressen mit skandinavischen Zeichen gesendet werden

8

Mit den Klassen SmtpClient , MailMessage und MailAddress kann ich keine E-Mail-Adressen wie å[email protected] senden. Ich bekomme den Fehler / Ausnahmen wie folgt:

  

Im Mail-Header wurde ein ungültiges Zeichen gefunden: 'å'.

     

--------------------------- Fehler beim Senden der E-Mail   --------------------------- System.Net.Mail.SmtpException: Der Client oder Server ist nur für E-Mail-Adressen mit ASCII konfiguriert   lokale Teile: å[email protected].

     

bei System.Net.Mail.MailAddress.GetUser (Boolean allowUnicode)

     

unter System.Net.Mail.MailAddress.GetAddress (Boolean allowUnicode)

     

unter System.Net.Mail.MailAddress.Encode (Int32 charsConsumed, Boolean   allowUnicode)

     

bei System.Net.Mail.MailAddressCollection.Encode (Int32   charsConsumed, Boolean allowUnicode)      bei System.Net.Mail.Message.PrepareHeaders (Boolean sendEnvelope,   Boolean allowUnicode)      bei System.Net.Mail.Message.Send (BaseWriter Writer, Boolean   sendEnvelope, Boolean allowUnicode)      bei System.Net.Mail.SmtpClient.Send (MailMessage-Nachricht)

Diese Zeichen in meinem Betreff / Körper sind gut, aber nicht in E-Mail-Adressen.

Ich habe versucht, SmtpClient.DeliveryMethod = SmtpDeliveryFormat.International oder MailMessage.HeadersEncoding = Encoding.Unicode (oder UTF8 ) zu setzen und es scheint nichts zu ändern. Dies sind echte E-Mail-Adressen von Personen, mit denen wir kommunizieren müssen, daher ist es ein kleines Problem.

Ich habe den .Net-Quellcode durchforstet, bin aber nirgends wirklich hingekommen. Ich habe eine ServerSupportsEai -Eigenschaft aufgespürt und Google sagt mir, dass EAI für die Internationalisierung der E-Mail-Adresse steht ( Ссылка ), aber es ist ziemlich unklar wenn dies eine Einschränkung in meinem Code ist, oder wenn der spezifische Server, mit dem ich spreche, dies nicht unterstützt, ... da ich einen Testserver verwende, um zu vermeiden, dass E-Mails an ahnungslose Schweden gesendet werden!

Kann mir jemand helfen, dies zu klären? Unterstützt dies .Net, wenn ja, was sollte mein Client-Code tun, um es zu aktivieren?

    
Mr. Boy 02.02.2016, 16:43
quelle

1 Antwort

10

Um UTF-8-Zeichen gemäß RFC6531 senden zu können, müssen Client und Server dies unterstützen.

Wenn Sie die .NET-Implementierung von SmtpClient verwenden, müssen Sie Framework-Version 4.5 als Ziel angeben, da diese Implementierung die Erweiterung SMTPUTF8 unterstützt.

Wenn Sie % co_de festlegen % Eigenschaft, die Sie benötigen, damit Ihr Client UTF8-Zeichen unterstützt:

%Vor%

Wenn wir die DeliveryFormat -Methode rückentwickeln, können wir den Stack-Trace Ihrer Frage einfach verfolgen. Sie finden diese Implementierung:

%Vor%

Das Send boolean wird von der Methode allowUnicode bereitgestellt:

%Vor%

Jetzt kommt der Server im Bild. Wann wird der private boolean Send wahr? Es zeigt sich, dass beim Senden des Befehls ServerSupportsEai die EHLO Aufrufe SmptConnection :

%Vor%

Wenn Sie im Voraus wissen möchten, ob Ihr Mailserver diese Erweiterung unterstützt, können Sie einfach eine Verbindung mit einem Telnet-Client (ich benutze putty) zu Ihrem SMTP-Server herstellen und den Befehl ParseExtensions senden und die Ergebnisse überprüfen.

Die Verbindung zu EHLO somename auf Port 587 gibt mir folgende Ausgabe:

%Vor%

Beachten Sie die letzte Zeile: Sie enthält unser erforderliches SMTPUTF8

tl; dr

Um internationale Zeichen in den E-Mail-Adressen verwenden zu können, müssen Sie smtp.gmail.com auf DeliveryFormat setzen und einen SMTP-Server verwenden, der die SMTPUTF8-Erweiterung unterstützt, und ihn im Befehl SmtpDeliveryFormat.International ankündigt.

    
rene 02.04.2016 16:30
quelle

Tags und Links