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

用Java验证电子邮件

如何解决《用Java验证电子邮件》经验,为你挑选了1个好方法。

有没有办法在Java代码中验证电子邮件地址是否有效.通过有效,我不仅仅意味着它的格式正确(someone@domain.subdomain),但这是一个真正的活动电子邮件地址.

我几乎可以肯定,没有100%可靠的方法可以做到这一点,因为这种技术将成为垃圾邮件发送者的梦想.但也许有一些技术可以提供一些关于地址是否"真实"的有用指示.



1> MBCook..:

这就是我所拥有的.要检查地址是否是有效格式,这里有一个正则表达式,它验证它几乎是rfc2822(它没有捕获一些奇怪的角落情况).我去年在网上发现了它.

private static final Pattern rfc2822 = Pattern.compile(
        "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
);

if (!rfc2822.matcher(email).matches()) {
    throw new Exception("Invalid address");
}

这将采用简单的语法(大多数情况下).我知道的另一项检查将让您检查域是否有MX记录.它看起来像这样:

Hashtable env = new Hashtable();

env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");

DirContext ictx = new InitialDirContext(env);

Attributes attrs = ictx.getAttributes(domainName, new String[] {"MX"});

Attribute attr = attrs.get("MX");

if (attr == null)
    // No MX record
else
    // If attr.size() > 0, there is an MX record

这个,我也在'网上找到了.它来自这个链接.

如果这两个都通过,你很有可能拥有一个有效的地址.至于如果它是自己的地址(不仅仅是域名),它不是完整的等等......你真的无法检查.

请注意,第二次检查是耗时的.它可能需要几毫秒到> 30秒(如果DNS没有响应并超时).对于大量的人来说,尝试并实时运行并不是什么好事.

希望这可以帮助.

编辑

我想指出,至少而不是正则表达式,有更好的方法来检查基本的有效性.Don和Michael指出Apache Commons有一些东西,我最近发现你可以在InternetAddress上使用.validate()让Java检查地址是否真的是RFC-8222,这肯定比我的正则表达式更准确.


是的:http://commons.apache.org/validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有