SmtpException:仅为具有ASCII本地部分的电子邮件地址配置客户端或服务器

Xav*_*nas 14 .net c# smtp smtpclient

当我尝试将电子邮件发送到包含突出字符(é)的地址时,SmtpClient.Send()方法抛出此异常:

System.Net.Mail.SmtpException:仅为具有ASCII本地部分的电子邮件地址配置客户端或服务器:léo.xxx@example.com.
在System.Net.Mail.Mail上的System.Net.Mail.MailAddress.GetAddress(布局allowUnicode)
中的System.Net.Mail.SmtpClient.ValidateUnicodeRequirement(MailMessage ...)(MailMessage ...
)

消息的制定使我可能有一个设置,我可以激活,以使这项工作,虽然我没有找到任何关于这个主题.

我尝试了几种SMTP服务器,包括Gmail.以下是repro的相关位:

var msg = new MailMessage();
msg.Subject = "Test";
msg.From = new MailAddress("xxx@gmail.com");
msg.To.Add(new MailAddress("léo.yyy@gmail.com"));

new SmtpClient().Send(msg);
Run Code Online (Sandbox Code Playgroud)

的app.config

<system.net>
    <mailSettings>
        <smtp from="xxx@gmail.com">
            <network host="smtp.gmail.com" port="587" userName="xxx@gmail.com" password="password" enableSsl="true" />
        </smtp>
    </mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)

And*_*rew 17

如果您的SmtpClient实例的DeliveryFormat属性设置为SmtpDeliveryFormat.SevenBit(默认值),那么当您尝试发送电子邮件时,您需要确保您的SMTP网关在通过.NET发送ELHO时使用SMTPUTF8进行回复.如果网关能够支持UTF8,SmtpClient使用它来计算.

如果DeliveryFormat是SmtpDeliveryFormat.International,那么你将能够发送无论如何.

  • 根据[参考源](https://referencesource.microsoft.com/#System/net/System/Net/mail/SmtpClient.cs,ebaa2d61cfed8051) 和我的测试,**两个**条件都必须满足(` SmtpDeliveryFormat.International` 和 `SMTPUTF8`),而不是 **其中一个**,就像你的回答所暗示的那样。 (3认同)
  • 尝试将传递格式设置为国际,但仍然出现相同的错误(使用 Gmail 的服务器)。 (2认同)