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?
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:
Das Send
boolean wird von der Methode allowUnicode
bereitgestellt:
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
:
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:
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.
Tags und Links .net c# .net-4.5 email smtpclient