同样用到了dnsjava(下载地址:http://www.dnsjava.org/)来获取MX记录。考虑到效率问题可将获取的MX记录保存到xml或数据库,下次使用时先检索本地数据,若不存在再获取其MX记录。
CheckEmail.java
import
java.io.
*
;
import java.net. * ;
import org.xbill.DNS. * ;
public class CheckEmail
{
public static boolean check(String mailTo)
{
if (!mailTo.matches("w+([-_.]w+)*@w+([-.]w+)*.w+([-.]w+)*")) { //判断格式
return false;
}
String hostName = mailTo.split("@")[1]; //获得如163.com
String host = null; // MX记录
try {
Lookup lookup = new Lookup(hostName, Type.MX);
lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL) {
return false;
}
else {
Record[] result = lookup.getAnswers();
host = result[0].getAdditionalName().toString();
}
Socket socket = new Socket(host, 25);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
in.readLine();
out.write("HELO Sender ");
out.flush();
in.readLine();
out.write("MAIL FROM:<xx@xxx.xx> ");
out.flush();
in.readLine();
out.write("RCPT TO:<" + mailTo + "> ");
out.flush();
String r = in.readLine();
out.write("QUIT ");
out.flush();
out.close();
in.close();
socket.close();
if (!r.startsWith("250")) {
return false;
}
else {
return true;
}
} catch (Exception e) {
return false;
}
}
}
import java.net. * ;
import org.xbill.DNS. * ;
public class CheckEmail
{
public static boolean check(String mailTo)
{
if (!mailTo.matches("w+([-_.]w+)*@w+([-.]w+)*.w+([-.]w+)*")) { //判断格式
return false;
}
String hostName = mailTo.split("@")[1]; //获得如163.com
String host = null; // MX记录
try {
Lookup lookup = new Lookup(hostName, Type.MX);
lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL) {
return false;
}
else {
Record[] result = lookup.getAnswers();
host = result[0].getAdditionalName().toString();
}
Socket socket = new Socket(host, 25);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
in.readLine();
out.write("HELO Sender ");
out.flush();
in.readLine();
out.write("MAIL FROM:<xx@xxx.xx> ");
out.flush();
in.readLine();
out.write("RCPT TO:<" + mailTo + "> ");
out.flush();
String r = in.readLine();
out.write("QUIT ");
out.flush();
out.close();
in.close();
socket.close();
if (!r.startsWith("250")) {
return false;
}
else {
return true;
}
} catch (Exception e) {
return false;
}
}
}
考虑到效率&资源问题,不推荐这样验证电子邮件的真实性。