我正在研究java中更完整的电子邮件验证工具,并且在“用户名”和“地址”部分的电子邮件中嵌入了评论的有趣功能。
http://www.dominicsayers.com/isemail/中的以下代码段可以说明电子邮件中的评论。
注释是括号括起来的文本(如下所示)。这些都没问题,但不构成地址的一部分。换句话说,发送到first.last@example.com的邮件将转到与第一个(a).last(b)@example(c).com(d)相同的位置。奇怪但真实。
我尝试输入一个网址,例如“google(ignore).com”,但是firefox和其他一些浏览器都失败了,我想知道这是因为它错了还是因为他们不知道主机名注释?
答案 0 :(得分:1)
原始电子邮件RFC RFC 822确实允许该语法 - addr-spec
内的评论。但是,当您通过RFC 2822 ... 10年前修改RFC时,不希望使用像您要使用它们的评论。它仍然在当前版本RFC 5322中标记为已过时。使用该语法发出任何东西都没有好借口。
地址解析器应该是向后兼容的,以便涵盖所有可能的情况,包括10年不推荐的位,就像你试图利用的那样。但我敢打赌,许多接收邮件代理的人都无法正确解析这些评论。因此,即使您可能在技术上通过RFC的"obsolete addressing"部分找到了漏洞,但在实践中它不太可能对您有所帮助。
对于HTTP,语法规则与电子邮件语法规则不同。如您所见,RFC 822的评论部分不适用。
答案 1 :(得分:0)
仅仅因为你可以在规范中做到这一点,并不意味着你应该这样做。例如,Gmail不接受该地址的评论格式。
其次,(到最后一点),电子邮件地址允许使用paren-comments并不意味着它们适用于URL。
最后,我的建议是:我会根据您的要求定制验证器的完整性。如果您正在编写新的MTA(邮件传输代理),则可能必须完成所有操作。如果您正在为用户输入编写验证器,请保持简单: