18

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

System.Net.Mail.SmtpException:客户端或服务器仅配置为具有 ASCII 本地部分的电子邮件地址:léo.xxx@example.com。
在 System.Net.Mail.MailAddress.GetAddress(Boolean 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("xxx@gmail.com");
msg.To.Add(new MailAddress("léo.yyy@gmail.com"));

new SmtpClient().Send(msg);

应用程序配置

<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>
4

4 回答 4

27

如果您的实例的DeliveryFormat属性SmtpClient设置为SmtpDeliveryFormat.SevenBit(默认值),那么您需要确保您的 SMTP 网关在尝试发送电子邮件SMTPUTF8时由 .NET 发送时回复。使用它来确定网关是否能够支持 UTF8。EHLOSmtpClient

根据 .NET Framework 4.5+ 和 .NET core 的源,接收服务器必须支持 UTF8 并且DeliveryFormat必须设置为SmtpDeliveryFormat.International才能发送。

有关最新逻辑和完整详细信息,请参见IsUnicodeSupported

于 2013-04-17T14:24:27.210 回答
3

迟到的答案,但是,我通过指定这样的编码解决了这个问题:

var mailMessage = new MailMessage
            {
               From = new MailAddress("test@domain.co.zw", "Test User", Encoding.UTF8)
}

就我而言,服务器导致了错误。

于 2016-03-09T18:14:41.907 回答
0

下面的代码对我有用。

SmtpClient smtpClient = new SmtpClient(SMTPServer, SMTPPort)
{
    Credentials = new NetworkCredential("SMTPUserName", "SMTPPassword"),
    EnableSsl = true,
    DeliveryFormat = SmtpDeliveryFormat.International,
}; 
于 2021-07-08T08:00:34.227 回答
-6

.net 仅支持 ASCII 字符。我不相信它支持扩展的 ASCII 字符(包括有问题的重音 e)。

http://www.asciitable.com/

我们在用户尝试将丹麦语字符用于 a / e 时遇到了同样的问题。

于 2012-11-07T03:44:14.590 回答