Convert non-ascii domain to SMTP compatible

2019-04-11 13:41发布

When customers enter email addresses with non-ascii chars like äüö our SMTP rejects to process them.

So I think might be there is a solution to handle those domains myself and convert them to punyocode.

Is there a simple way of doing so using c#?

Would this work anyway?

2条回答
【Aperson】
2楼-- · 2019-04-11 14:13

The problem with this approach is that you'll be changing the email addresses.

The email addresses bevan@example.com and bevän@example.com are different email addresses, however much they appear the same.

Making the change you suggest will break email - people might receive the messages, but they won't be able to reply to them.

Your SMTP server that doesn't handle accented characters sounds like a dinosaur. Much as it might be a pain in the proverbial, replacement and/or upgrade is likely the best solution.

You'll likely be able to get more appropriate assistance over on ServerFault.

查看更多
兄弟一词,经得起流年.
3楼-- · 2019-04-11 14:31

You can use Uri.DnsSafeHost to convert to 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;
    }
}

In app.config:

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

Result:

xn--caf-dma.com
查看更多
登录 后发表回答