使用非ASCII字符将电子邮件发送到地址

时间:2014-04-24 14:42:06

标签: .net email smtp .net-4.5

我们有一个小型邮件Web服务,因为并非每个应用都可以访问SMTP服务器。现在今天晚上,Web服务无法发送邮件,因为接收邮件地址包含一些更复杂的字符,导致The client or server is only configured for E-mail addresses with ASCII local-parts错误。

在Google搜索解决方案后,我发现您应该将DeliveryFormat设置为International

我已经实现了这一点,但我仍然遇到同样的错误。添加手表还会告诉我smtp.IsUnicodeSupported仍然是false

这是目前的代码:

System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();   
mail.Subject = mailSubject;
mail.Body = mailBody;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.Normal;
mail.HeadersEncoding = Encoding.UTF8;
System.Net.Mail.SmtpClient smtp  = new System.Net.Mail.SmtpClient("smtp.mydomain.net");
smtp.DeliveryFormat = SmtpDeliveryFormat.International;
smtp.Send(mail);

属性smtp.transport.ServerSupportsEai也仍然为false,但此时似乎尚未建立与SMTP服务器的联系。

我还可以做些什么来强制SMTP客户端发送邮件? 它甚至可以在应用程序端解决吗?

2 个答案:

答案 0 :(得分:1)

仅部分支持电子邮件地址中的非ASCII字符。

如果域部分包含国际字符,则可以将其转换为正确的punycode表示形式,但如果@ -sign左侧存在非ascii字符,则似乎不存在已建立的标准编码(实验性RFC 5355除外,它与现有的SMTP标准不兼容)。

答案 1 :(得分:1)

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

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