javascript 正则表达 验证邮箱
<script type="text/javascript"> function checkEmail(){ var emailValue=document.getElementsByName("email").value; if (!isEmail(emailValue)){ alert("您输入的邮箱有误,请重新核对后再输入!"); document. getElementById_r("email").focus(); return false; } return true; } function isEmail(str){ var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/; return reg.test(str); } </script>
<s:textfield name="email" onblur="checkEmail()"/>
1.
public static boolean checkEmail(String email) { if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) { return false; } String host = ""; String hostName = email.split("@")[1]; Record[] result = null; SMTPClient client = new SMTPClient(); try { // 查找MX记录 Lookup lookup = new Lookup(hostName, Type.MX); lookup.run(); if (lookup.getResult() != Lookup.SUCCESSFUL) { return false; } else { result = lookup.getAnswers(); } // 连接到邮箱服务器 for (int i = 0; i < result.length; i++) { host = result[i].getAdditionalName().toString(); client.connect(host); if (!SMTPReply.isPositiveCompletion(client.getReplyCode())) { client.disconnect(); continue; } else { break; } } //以下2项自己填写快速的,有效的邮箱 client.login("163.com"); client.setSender("sxgkwei@163.com"); client.addRecipient(email); if (250 == client.getReplyCode()) { return true; } } catch (Exception e) { e.printStackTrace(); } finally { try { client.disconnect(); } catch (IOException e) { } } return false; } 需要的jar支持:commons-net-2.2.jar,dnsjava-2.1.1.jar 此方式优点:验证出的结果,完全符合真实情况,如果一个邮箱被验证存在,那么它就一定存在,反之亦然。 此方式缺点:验证时比较耗时,我自己检测,需要5秒左右的时耗;实际情况视你自己写的发件方而定。
2核心代码: public static boolean checkEmail(String email) throws DNSLookupException { if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) { return false; } IsEMailResult result = IsEMail.is_email_verbose(email, true); switch (result.getState()) { case OK: return true; default: return false; } } 需要的jar支持:IsEMail.jar 此方式优点:验证时耗时短,我自己检测,几乎立刻就可以获得结果。 此方式缺点:验证出的结果,基本符合真实情况;此方式验证的只是邮箱表示的站点是否存在,至于邮箱是否真实存在则不一定。如***@gmail.com格式的邮箱,则全部验证存在,但实际情况则并非如此;但提供此种邮箱服务的google站点却的确真实存在。