将非ascii域转换为SMTP兼容

时间:2009-10-20 05:52:37

标签: c# ascii diacritics email-address punycode

当客户输入包含äü的非ascii字符的电子邮件地址时,我们的SMTP拒绝处理它们。

所以我认为可能有一个解决方案来自己处理这些域并将它们转换为punyocode。

使用c#有一种简单的方法吗?

这还有用吗?

2 个答案:

答案 0 :(得分:8)

您可以使用Uri.DnsSafeHost转换为Punycode:

using System;

class Test
{
    static void Main()
    {
        Console.WriteLine(ConvertToPunycode("caf\u00e9.com"));
    }

    static string ConvertToPunycode(string domain)
    {
        Uri uri = new Uri("http://"+domain);
        return uri.DnsSafeHost;
    }
}

在app.config中:

<configuration>
  <uri>
    <idn enabled="All" />
  </uri>
</configuration>

结果:

xn--caf-dma.com

答案 1 :(得分:0)

此方法存在的问题是您正在更改电子邮件地址。

电子邮件地址bevan@example.combevän@example.com不同的电子邮件地址,不管它们看起来多么相同。

根据您的建议进行更改打破电子邮件 - 人们可能会收到这些消息,但他们将无法回复这些消息。

不处理重音字符的SMTP服务器听起来像恐龙。因为它可能是众所周知的痛苦,更换和/或升级可能是最好的解决方案。

您可能会在ServerFault上获得更合适的帮助。