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

时间:2012-11-06 22:56:20

标签: c# .net smtp smtpclient

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

  

System.Net.Mail.SmtpException:仅配置客户端或服务器   对于使用ASCII本地部分的电子邮件地址:léo.xxx@example.com     在System.Net.Mail.MailAddress.GetAddress(布尔allowUnicode)
    在System.Net.Mail.SmtpClient.ValidateUnicodeRequirement(MailMessage ...)
    在System.Net.Mail.SmtpClient.Send(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);

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

4 个答案:

答案 0 :(得分:13)

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

如果DeliveryFormat为SmtpDeliveryFormat.International,那么无论如何都可以发送。

答案 1 :(得分:1)

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

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

在我的情况下,服务器导致错误。

答案 2 :(得分:0)

以下代码对我有用。

SmtpClient smtpClient = new SmtpClient(SMTPServer, SMTPPort)
{
    Credentials = new NetworkCredential("SMTPUserName", "SMTPPassword"),
    EnableSsl = true,
    DeliveryFormat = SmtpDeliveryFormat.International,
}; 

答案 3 :(得分:-5)

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

http://www.asciitable.com/

我们遇到了与尝试使用丹麦字符的用户相同的问题。