当我尝试向包含突出字符(é)的地址发送电子邮件时,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>
答案 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)