2009-10-20 67 views
3

当客户使用非ascii字符输入电子邮件地址时,我们的SMTP拒绝处理它们。将非ASCII字段转换为与SMTP兼容

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

是否有一个简单的方法来使用c#?

无论如何这项工作?

+0

RFC821和RFC822是很老,甚至是RFC2822已过时。但至少在RFC2821和RFC2822之前,SMTP地址只能包含ASCII字符的一个子集。如果您查看http://en.wikipedia.org/wiki/E-mail_address 和“国际化”部分。你会看到发生了什么。检查当前MTA新标准的支持很重要。我不完全理解你的用例。用户直接与您的MTA连接?你可以在设置他的时候给他们分配带重音字符的SMTP地址吗? – Junping 2010-01-06 14:27:13

回答

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 
+0

添加了C#代码,但它不起作用,因为域名是按照原样返回的,我应该在哪里添加ASP.net应用程序的配置设置作为添加web.config发生错误。 – 2010-06-28 09:14:57

+1

是否可以在不更改machine.config的情况下实现此目的? – 2010-06-28 10:05:59

+0

@Pranali:我相信*在IIS配置中有一些东西可以让你指定用于ASP.NET网站的配置......不确定。 – 2010-06-28 10:21:28

0

这种方法的问题是您将更改为的电子邮件地址。

电子邮件地址[email protected]bevä[email protected]不同电子邮件地址,但它们看起来多么相似。

进行建议的更改中断电子邮件 - 人们可能会收到邮件,但他们无法回复邮件。

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

您可能可以通过ServerFault获得更多合适的帮助。

+2

它不是一个“恐龙” - 它只是遵循RFC 822. – 2009-10-20 06:01:21