apache通用验证器返回假阳性结果

时间:2019-01-31 22:57:20

标签: java apache-commons email-validation

使用以下链接使用Apache通用电子邮件验证程序:

  

https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html

对于格式为:

的电子邮件,它返回假阳性结果
random@.com -> true
random.bla@gmail -> true

是否有更好的方法来验证电子邮件?

3 个答案:

答案 0 :(得分:1)

我认为您在代码中的某个地方犯了一个错误,我测试了EmailValidator并成功了,两个示例都返回false:

import org.apache.commons.validator.routines.EmailValidator;

public class TestMail {

public static void main(String[] args) {

    EmailValidator v = EmailValidator.getInstance();

    System.out.println(v.isValid("random@.com")); //false
    System.out.println(v.isValid("random.bla@gmail")); //false
}
}

使用依赖项:

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>1.4.0</version>
</dependency>

答案 1 :(得分:1)

对于“静态验证”,只有最新的commons-validator版本可以帮助/改善

请参阅:What is the best Java email address validation method?


如果您真的要验证电子邮件-当然,您需要确认它:

  • 首先进行静态验证(与您/您的lib一样好)
  • 然后发送电子邮件:
    • 带有标识确认链接,收件人必须“单击”(http得到!)。
  • 编写相应的端点/ servlet /控制器(http get),以“完成验证”。

另请参阅:https://en.wikipedia.org/wiki/Closed-loop_authentication ...


答案 2 :(得分:0)

Apache 通用电子邮件验证器在电子邮件地址具有 & 字符时有效,但它不是真的。

        assertFalse(EmailValidatorUtil.isValid("asdfasd&@hotmail.com"));