【问题标题】:Convert non-ascii domain to SMTP compatible将非 ascii 域转换为 SMTP 兼容
【发布时间】:2010-12-08 05:46:33
【问题描述】:

当客户输入带有非 ascii 字符(如 äüö)的电子邮件地址时,我们的 SMTP 拒绝处理它们。

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

有没有使用 c# 的简单方法?

这还能用吗?

【问题讨论】:

  • RFC821 和 RFC822 已经很老了,甚至 RFC2822 也已经过时了。但至少在 RFC2821 和 RFC2822 之前,SMTP 地址只能包含 ASCII 字符的子集。如果您查看en.wikipedia.org/wiki/E-mail_address 和“国际化”部分。你会看到发生了什么。检查当前 MTA 新标准的支持情况很重要。我不完全了解您的用例。用户直接与您的 MTA 交互?在设置他时,您是否能够为他们分配带有重音字符的 SMTP 地址?

标签: c# ascii diacritics email-address punycode


【解决方案1】:

您可以使用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

【讨论】:

  • 添加了 C# 代码,但由于域名原样返回,它不起作用,我应该在哪里添加 ASP.net 应用程序的配置设置,因为在 web.config 中添加它会出错。
  • 是否可以在不更改 machine.config 的情况下实现这一目标?
  • @Pranali:我相信在 IIS 配置中有一些东西可以让您指定用于 ASP.NET 网站的配置...不确定。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 它不是“恐龙”——它只是遵循 RFC 822。
猜你喜欢
  • 2010-12-30
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多