如题,判断email是否是真实的
解决方案 »
- SSH中,一个action中,放两个service,这样做对于设计模式好么?
- 部署项目是老出现这种错误,求助。。谢谢
- 请教:Spring+strut1 乱码 问题 filter.CharacterEncodingFilter?
- jsp中js问题
- Tomcat启动时自动运行程序
- struts2,spring,window.open
- 初学webservices 返回字符串能够实现,返回list集合报错 can't mapping java.until.list
- webservice客户端调用问题,高手帮忙啊~~~~~!!!!!(在线等,立刻给分)
- html登录,不能接收服服务返回数据
- 急!!!如何在jboss 4.0.0中配置for mysql的cmp?
- web service 调用dll的问题
- struts2的变量传递疑惑
有这样的需求吗?
做什么需要判断email是否是真实的?
一般情况下,就是由服务器自动向邮箱发一个邮件来激活,(就是修改一个状态)
修改了就表明它是可用的。
要发送邮件给很多人,先过滤掉假的email,发送时省点儿时间
public static void main(String [] args){
String str="[email protected]";
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
}
这个只验证了 email 的合法性
HELO [email protected]
返回正确返回码 应该就可以证明邮箱真的存在吧。 但是好麻烦,也耗资源做这些事
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:<[email protected]> ");
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;
}
}
}