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
# 1 楼答案
当您检查JavaDoc中的
InternetAddress.validate()
时,您可以看到:在wiki中,电子邮件地址描述为:
因此,一切都按预期进行
# 2 楼答案
虽然
foo@server
在技术上是一个合法的电子邮件地址,但将地址限制在“真实域”下是完全可行的现在“真实域”的定义是不平凡且不断变化的,所以我不会试图自己编写一个,而是依赖现有的代码
例如,Guava提供了一个} method 类,该类将接受
InternetDomainName
类,它提供了^{foo.com
、foo.bar.com
和example.accountant
但拒绝foo.thisIsNotaTld
或仅仅foo
这个main class comment of that class也很好地解释了这个问题和可能的解决办法