Java验证邮箱是否真实存在有效
要检测邮箱是否真实存在,必须了解两方面知识:
1. MX记录,winodws的nslookup命令。 查看学习 2. SMTP协议,如何通过telnet发送邮件。 查看学习 有个网站可以校验, http://verify-email.org/, 不过一小时只允许验证10次。 直接上代码:
import java.io.IOException; import org.apache.commons.net.smtp.SMTPClient; import org.apache.commons.net.smtp.SMTPReply; import org.xbill.DNS.Lookup; import org.xbill.DNS.Record; import org.xbill.DNS.Type; public class CheckEmailObj { public static boolean checkEmail(String email) { if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) { System.err.println("Format error"); return false; } String log = ""; 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) { log += "找不到MX记录\n"; 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 { log += "MX record about " + hostName + " exists.\n"; log += "Connection succeeded to " + host + "\n"; break; } } log += client.getReplyString(); // HELO cyou-inc.com client.login("cyou-inc.com"); log += ">HELO cyou-inc.com\n"; log += "=" + client.getReplyString(); // MAIL FROM: <zhaojinglun@cyou-inc.com> client.setSender("zhaojinglun@cyou-inc.com"); log += ">MAIL FROM: <zhaojinglun@cyou-inc.com>\n"; log += "=" + client.getReplyString(); // RCPT TO: <$email> client.addRecipient(email); log += ">RCPT TO: <" + email + ">\n"; log += "=" + client.getReplyString(); if (250 == client.getReplyCode()) { return true; } } catch (Exception e) { e.printStackTrace(); } finally { try { client.disconnect(); } catch (IOException e) { } // 打印日志 System.err.println(log); } return false; } public static void main(String[] args) { System.err.println("Outcome: " + CheckEmailObj.checkEmail("pandajj0703@gmail.com")); } }
需要的两个jar包: http://www.dnsjava.org/download/ http://apache.etoak.com /commons/net/binaries/commons-net-2.0.zip 执行结果: MX record about gmail.com exists. Connection succeeded to alt2.gmail-smtp-in.l.google.com. 220 mx.google.com ESMTP p37si6502151gvf.9 >HELO cyou-inc.com =250 mx.google.com at your service >MAIL FROM: <zhaojinglun@cyou-inc.com> =250 2.1.0 OK p37si6502151gvf.9 >RCPT TO: <pandajj0703@gmail.com> =250 2.1.5 OK p37si6502151gvf.9 Outcome: true 或者通过webservice实现:
|