当客户输入带有非ASCII字符(如äüö)的电子邮件地址时,我们的SMTP会拒绝处理它们。
因此,我认为可能有一个解决方案来处理这些域并将它们转换为punyocode。
是否有一种简单的方法使用c#来实现?
这样做是否可行?
当客户输入带有非ASCII字符(如äüö)的电子邮件地址时,我们的SMTP会拒绝处理它们。
因此,我认为可能有一个解决方案来处理这些域并将它们转换为punyocode。
是否有一种简单的方法使用c#来实现?
这样做是否可行?
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;
}
}
<configuration>
<uri>
<idn enabled="All" />
</uri>
</configuration>
结果:
xn--caf-dma.com
/// <summary>
/// Try passing example@äüö.com
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
internal string GetSafeEmail(string email)
{
const char at = '@';
string[] split = email.Split(at);
string safeHost = new Uri("http://" + split[1]).IdnHost;
// Don't convert the username to Punycode
return string.Join(at, split[0], safeHost);
}
这种方法的问题在于,您将会更改电子邮件地址。
bevan@example.com
和bevän@example.com
是不同的电子邮件地址,无论它们看起来多么相似。
您建议的更改将会破坏电子邮件 - 人们可能会收到消息,但他们将无法回复。
您的SMTP服务器不支持重音字符听起来像是一只恐龙。尽管这可能很麻烦,但更换和/或升级可能是最佳解决方案。
您可能会在ServerFault上获得更合适的帮助。