2009-10-20 42 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