为什么 TLD 作为域在 RFC 822/Apache-commons 验证下被接受?

问题描述 投票:0回答:1

根据 Apache 文档,他们的电子邮件验证遵循 RFC 822 规范

EmailValidator 根据 RFC 822 标准提供电子邮件地址验证。 来源

但是,在本地运行一些测试时,我发现某些 TLD 被接受为域名。

test@test      //invalid
[email protected]  //valid
test@com       //valid
test@comm      //invalid
test@amsterdam //valid
test@brussels  //valid

我想我在 RFC 中的某个地方读到

<local>@<domain>
是一个有效的电子邮件地址,但强烈建议不要使用(..因此应该被视为无效?)。所以我知道
test@test
无效,但
test@amsterdam
有效,因为
.amsterdam
是有效的 gTLD。

不确定这是否是一个错误或者是否是有意为之。从他们的实现和文档来看,不清楚什么应该是有效的,以及它是否 100% 符合 RFC 822 规范。


class Test {
    EmailValidator validator = EmailValidator.getInstance(false, true);

    @ParameterizedTest
    @ValueSource(strings = {
            "test@test",
            "[email protected]",
            "test@com",
            "test@comm",
            "test@amsterdam",
            "test@brussels"
    })
    void emails(String email) {
        System.out.printf("%-20s valid? %s%n", email, validator.isValid(email));
    }
}

我似乎也不明白的是

allowLocal
 构造函数中的参数 allowTld
EmailValidator
的作用

java apache-commons email-validation tld rfc822
1个回答
0
投票

我想说这是故意的。您可以通过提供您提到的参数来调整验证。

根据 https://www.icann.org/en/announcements/details/new-gtld-dotless-domain-names-prohibited-30-8-2013-en 禁止无点域名。

作为参数的解释:

  • allowLocal
    - 将允许本地域,例如
    mail@somenotexistingtld
  • allowTld
    - 将允许顶级域名,例如
    mail@com

要获得真正准确的 RFC822 验证,您需要将两者设置为

true
。但在现实生活中,我想说的是,在大多数情况下,它们将被省略或设置为
false

© www.soinside.com 2019 - 2024. All rights reserved.