有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java InternetAddress未正确验证电子邮件

我有一个方法来验证emailAddress

public boolean isValidEmailAddress(String email) {
        boolean result = true;
        try {
            InternetAddress emailAddr = new InternetAddress(java.net.IDN.toASCII(email));
            emailAddr.validate();
        } catch (AddressException ex) {
            result = false;
        }
        return result;
    }

我编写了一个单元测试,它接受abce@cdf,它不是在寻找。com什么的

   Assert.assertEquals(
                new CustomRuleEmailService().isValidEmailAddress("abc@cdf"),
                false
        );

返回true而不是false


共 (2) 个答案

  1. # 1 楼答案

    当您检查JavaDoc中的InternetAddress.validate()时,您可以看到:

    Validate that this address conforms to the syntax rules of RFC 822.

    在wiki中,电子邮件地址描述为:

    An email address is generally recognized as having two parts joined with an at-sign (@), although technical specification detailed in RFC 822 and subsequent RFCs are more extensive

    因此,一切都按预期进行

  2. # 2 楼答案

    虽然foo@server在技术上是一个合法的电子邮件地址,但将地址限制在“真实域”下是完全可行的

    现在“真实域”的定义是不平凡且不断变化的,所以我不会试图自己编写一个,而是依赖现有的代码

    例如,Guava提供了一个InternetDomainName类,它提供了^{} method类,该类将接受foo.comfoo.bar.comexample.accountant但拒绝foo.thisIsNotaTld或仅仅foo

    这个main class comment of that class也很好地解释了这个问题和可能的解决办法