当前位置:  开发笔记 > 编程语言 > 正文

什么是最好的Java电子邮件地址验证方法?

如何解决《什么是最好的Java电子邮件地址验证方法?》经验,为你挑选了8个好方法。

Java有哪些好的电子邮件地址验证库?是否有公共验证器的替代品?



1> Aaron Davids..:

使用官方的java电子邮件包是最简单的:

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


请注意,InternetAddress.validate()将user @ [10.9.8.7]和user @ localhost视为有效的电子邮件地址 - 它们是根据RFC进行的.但是,根据用例(Web表单),您可能希望将它们视为无效.
我怀疑InternetAddress构造函数已被篡改.或者我的系统被篡改了.或RFC822已被篡改.或者我现在可以真正使用一些睡眠.但我只是尝试了一些代码,如果将它们传递给InternetAddress构造函数,以下五个字符串都作为有效的电子邮件地址传递,并且"清楚",它们无效.我们在这里:`.`,`.com`,`com.,`abc`和`123`.此外,添加前导或尾随空格也不会使字符串无效.你是法官!
不仅如@ zillion1所说的那样有效,而且像bla @ bla这样的东西也被视为有效.真的不是最好的解决方案.
@NicholasTolleyCottrell这是Java,在这里我们抛出并捕获异常,我真的不明白你的观点
嗯,奶酪在我运行时失败了.什么地狱javax.mail库你链接到???
人们抱怨所有类型的不存在但有效的电子邮件地址正在被验证.它是电子邮件地址正确性的验证器,而不是它是否存在!在验证器之后,网站应始终使用激活机制来检查地址是否确实存在.
_a//c@gmail.com_在语法上是有效的,所有验证器都会接受它(除非它们被破坏).
我的观点是,在Java中创建异常是一个相对昂贵的过程,而执行返回布尔值的验证会产生更少的开销.

2> Matthew Flas..:

Apache Commons通常被称为一个可靠的项目.但请记住,如果您想确保它是真实的电子邮件,并且所有者希望在您的网站上使用该电子邮件,那么您仍需要向该地址发送验证电子邮件.

编辑:有一个错误,它在域上限制太多,导致它不接受来自新TLD的有效电子邮件.

这个错误在03/Jan/15 02:48在commons-validator版本1.4.1中解决


Apache Commons EmailValidator有一个严重的缺点:不支持IDN.
如果您的用例是验证用户的远程电子邮件地址,则此解决方案存在相当大的缺陷(类似于InternetAddress.validate()):EmailValidator将用户@ [10.9.8.7]视为有效的电子邮件地址 - 它们是根据RFC,但可能不适用于用户注册/联系表单.
不,Apache`EmailValidator`类不会发送电子邮件进行验证.

3> Aksel Willge..:

Apache Commons验证器可以在其他答案中提到.

pom.xml中:


    commons-validator
    commons-validator
    1.4.1

的build.gradle:

compile 'commons-validator:commons-validator:1.4.1'

进口:

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

代码:

String email = "myName@example.com";
boolean valid = EmailValidator.getInstance().isValid(email);

并允许本地地址

boolean allowLocal = true;
boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);


在Android Studio中,您可以将编译'commons-validator:commons-validator:1.4.1'添加到app\build.gradle的依赖项{}中
在实际尝试构建我的项目之后,似乎apache commons不能很好地使用Android,数百个警告和一些错误,它甚至没有编译.这就是我最终使用http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/

4> Pujan Srivas..:

迟到的答案,但我认为这很简单,值得:

    public boolean isValidEmailAddress(String email) {
           String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
           java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern);
           java.util.regex.Matcher m = p.matcher(email);
           return m.matches();
    }

测试案例:

在此输入图像描述

出于生产目的,域名验证应以网络方式执行.


这是一个相当残酷的简单验证器,忽略了大多数RFC规则和IDN.对于任何生产质量的应用程序,我都要避免这种情况.
不要为RFC所涵盖的内容推出自己的基于正则表达式的验证器.
只要你不介意偶尔爆胎,重新发明轮子是可以的

5> Alexander Bu..:

如果您正在尝试从客户端收到表单验证,或者只是进行bean验证 - 请保持简单.最好是进行松散的电子邮件验证,而不是做一个严格的电子邮件验证并拒绝某些人(例如,当他们尝试注册您的Web服务时).几乎所有允许在电子邮件的用户名部分和每月按字面意思添加的许多新域(例如.company,.entreprise,.estate),更安全的不限制:

Pattern pattern = Pattern.compile("^.+@.+\\..+$");
Matcher matcher = pattern.matcher(email);


如何将其更改为"^.+ @.+(\\.[^ \\.] +)+ $"以避免尾随点?
这是一个非常好的观点,任何合理的应用程序都应该有其他措施来防止这些输入无论如何被利用

6> lacinato..:

问题的后期,在这里,但是:我在这个地址维持一个班级:http://lacinato.com/cm/software/emailrelated/emailaddress

它基于Les Hazlewood的课程,但有许多改进并修复了一些错误.Apache许可证.

我相信它是Java中功能最强大的电子邮件解析器,我还没有看到任何一种语言的能力,尽管可能有一种语言.它不是lexer风格的解析器,但使用了一些复杂的java正则表达式,因此效率不高,但是我的公司用它解析了超过100亿个真实地址:它当然可用于高性能情况.也许每年一次,它会打到一个地址,导致正则表达式堆栈溢出(适当),但这些是垃圾邮件地址,数百或数千个字符长,有许多引号和括号等.

RFC 2822和相关规范在电子邮件地址方面确实非常宽松,因此像这样的类对于大多数用途来说都是过度的.例如,以下是合法地址,根据规范,空格和所有:

" (again)

没有邮件服务器允许这样做,但是这个类可以解析它(并将其重写为可用的表单).

我们发现现有的Java电子邮件解析器选项不够耐用(意思是,它们都不能解析一些有效的地址),所以我们创建了这个类.

代码已有详细记录,并且有许多易于更改的选项,允许或禁止某些电子邮件表单.它还提供了许多方法来访问地址的某些部分(左侧,右侧,个人名称,注释等),以解析/验证邮箱列表标题,以解析/验证返回路径(在标题中是唯一的),等等.

编写的代码具有javamail依赖关系,但如果您不想要它提供的次要功能,则很容易删除.



7> Markus Malku..:

我只是想知道为什么没有人想出@EmailHibernate Validator的附加约束.验证器本身是EmailValidator.



8> Philip..:

Les Hazlewood使用Java正则表达式编写了一个非常全面的RFC 2822兼容的电子邮件验证器类.您可以在http://www.leshazlewood.com/?p=23找到它.但是,它的彻底性(或Java RE实现)会导致效率低下 - 阅读有关长地址解析时间的注释.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有