【问题标题】:Unicode character in email not throwing exception电子邮件中的 Unicode 字符不会引发异常
【发布时间】:2015-08-30 14:21:11
【问题描述】:

我有一个带有 unicode 字符的电子邮件地址。它不会抛出异常。 我正在使用 .Net Mail Address 重载构造函数。 MSDN 表示,当地址包含非 ASCII 字符时,它会抛出 FormatException。但我无法重现异常。

var addr = new System.Net.Mail.MailAddress("ñ@c.com","test", Encoding.UTF8);

如果这是可识别的电子邮件地址,那么我正在搜索一个会引发单元测试异常的字符。

【问题讨论】:

  • 每个字符都是一个 UNICODE 字符。它在哪里说它会抛出异常?文档说如果它是“无法识别的格式”,它会抛出关于字符msdn.microsoft.com/en-us/library/591bk9e8%28v=vs.110%29.aspx
  • 这个重载版本文档说它会抛出异常。 msdn.microsoft.com/en-us/library/f52hswkf(v=vs.110).aspx 。基本上我需要一个电子邮件地址来单元测试电子邮件是否因 unicode 字符失败。
  • 你试过一些汉字吗? “non-ASCII”实际上可能是“non-Latin1”,并且 ñ 在那里是完全可以接受的。
  • 是的,我也试过很多中文日文和其他字符。没有成功

标签: c# .net unicode email-validation system.net.mail


【解决方案1】:

文档似乎已过时。自 .NET 4.0 起,邮件地址中支持 Unicode 字符,请参阅以下博客文章: http://blogs.msdn.com/b/ncl/archive/2009/08/06/what-s-new-in-system-net-mail.aspx

【讨论】:

  • 这里只提到了显示名称,没有提到地址被允许使用不同的编码。
【解决方案2】:

源代码在主题上非常清楚 - 没有检查 unicode 字符。

这意味着文档已经过时 - 很长一段时间以来,unicode 域名都得到了支持。仅当您用于发送电子邮件的 SMTP 服务器支持电子邮件地址国际化时,才会应用旧检查的唯一剩余部分。

换句话说,不要将电子邮件地址中的 unicode 内容验证为错误 - 它不是无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多