SmtpException: клиент или сервер настроен только для адресов электронной почты с локальными частями ASCII

Метод SmtpClient.Send() выдает это исключение, когда я пытаюсь отправить электронное письмо на адрес, содержащий подчеркнутый символ (é):

System.Net.Mail.SmtpException: клиент или сервер настроены только для адресов электронной почты с локальными частями ASCII: lé[email protected]
в System.Net.Mail.MailAddress.GetAddress (логический allowUnicode)
в System.Net.Mail.SmtpClient.ValidateUnicodeRequirement(MailMessage...)
в System.Net.Mail.SmtpClient.Send (сообщение MailMessage)

Формулировка сообщения заставляет меня думать, что может быть настройка, которую я могу активировать, чтобы сделать эту работу, хотя я ничего не нашел по этому вопросу.

Я пробовал несколько SMTP-серверов, в том числе Gmail. Вот соответствующие биты для воспроизведения:

Код

var msg = new MailMessage();
msg.Subject = "Test";
msg.From = new MailAddress("[email protected]");
msg.To.Add(new MailAddress("lé[email protected]"));

new SmtpClient().Send(msg);

app.config

<system.net>
    <mailSettings>
        <smtp from="[email protected]">
            <network host="smtp.gmail.com" port="587" userName="[email protected]" password="password" enableSsl="true" />
        </smtp>
    </mailSettings>
</system.net>

Ответ 1

.net поддерживает только символы ASCII. Я не верю, что он поддерживает расширенные символы ASCII (в том числе акцентированный e).

http://www.asciitable.com/

Мы столкнулись с теми же проблемами, когда пользователи пытались использовать датский символ для a/e.

Ответ 2

Если для свойства DeliveryFormat вашего экземпляра SmtpClient задано значение SmtpDeliveryFormat.SevenBit (по умолчанию), вам необходимо убедиться, что ваш SMTP-шлюз отвечает SMTPUTF8 при отправке EHLO через .NET во время попытки отправки электронной почты. SmtpClient использует это, чтобы определить, способен ли шлюз поддерживать UTF8.

Если DeliveryFormat - SmtpDeliveryFormat.International, вы сможете отправлять независимо.

Ответ 3

Поздний ответ, но я решил это, указав кодировку следующим образом:

var mailMessage = new MailMessage
            {
               From = new MailAddress("[email protected]", "Test User", Encoding.UTF8)
}

В моем случае сервер вызывал ошибку.