java验证电子邮件_在Java中验证电子邮件

这里是我有的。要检查地址是一个有效的格式,这里是一个正则表达式,验证它是接近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

这个,我也在网上找到了。它来自this link。

如果这两者都通过,您就有机会获得有效的地址。至于如果地址,它是自己(不只是域),它不是满的,等…你真的不能检查。

请注意,第二个检查是耗时的。它可以从毫秒到> 30秒(如果DNS没有响应和超时)。这不是为大量的人们尝试和运行实时的。

希望这可以帮助。

编辑

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值