如何使用java验证电子邮件地址?
我正在开发一个系统,任何用户都可以发送他的个人信息,如姓名、联系方式和电子邮件。将有另一个门户,我们可以从中检索这些数据和流程。在这方面,我正在使用JavaWeb技术 现在我的问题是关于验证电子邮件地址的过程。这不仅意味着电子邮件地址是否格式错误,还意味着该电子邮件id的可用性 这意味着如果我输入“abc@efg.hijk“这是格式完全正确的电子邮件id,但我的系统将检查此类电子邮件地址是否确实存在。如果它存在,我会将它存储在数据库中如何使用java验证电子邮件地址?,java,validation,jsp,email-validation,Java,Validation,Jsp,Email Validation,我正在开发一个系统,任何用户都可以发送他的个人信息,如姓名、联系方式和电子邮件。将有另一个门户,我们可以从中检索这些数据和流程。在这方面,我正在使用JavaWeb技术 现在我的问题是关于验证电子邮件地址的过程。这不仅意味着电子邮件地址是否格式错误,还意味着该电子邮件id的可用性 这意味着如果我输入“abc@efg.hijk“这是格式完全正确的电子邮件id,但我的系统将检查此类电子邮件地址是否确实存在。如果它存在,我会将它存储在数据库中 提前感谢您的支持。您可以轻松地用谷歌搜索格式检查代码。因此,
提前感谢您的支持。您可以轻松地用谷歌搜索格式检查代码。因此,我们只讨论存在性检查程序
电子邮件验证可以由我从中找到的“SMTPMXLookup”类完成。以下类可以帮助您查找电子邮件地址的有效性:
公共类SMTPMXLookup{
私有静态int-hear(BufferedReader-in)引发IOException{
字符串行=null;
int res=0;
而((line=in.readLine())!=null){
字符串pfx=行。子字符串(0,3);
试一试{
res=整数.parseInt(pfx);
}捕获(例外情况除外){
res=-1;
}
如果(第3行字符)!='-'){
打破
}
}
返回res;
}
私有静态void say(BufferedWriter wr,字符串文本)
抛出IOException{
wr.write(text+“\r\n”);
wr.flush();
}
私有静态ArrayList getMX(字符串主机名)
抛出NamingException{
//对域中的MX记录执行DNS查找
Hashtable env=新的Hashtable();
put(“java.naming.factory.initial”,
“com.sun.jndi.dns.DnsContextFactory”);
DirContext ictx=新的初始DirContext(env);
Attributes attrs=(Attributes)ictx.getAttributes(主机名,新字符串[]{“MX”});
属性attr=attrs.get(“MX”);
//如果我们没有MX记录,请尝试机器本身
如果((attr==null)| |(attr.size()==0)){
attrs=ictx.getAttributes(主机名,新字符串[]{“A”});
attr=attrs.get(“A”);
if(attr==null)
抛出新的NamingException
(“名称“+”主机名“+”不匹配);
}
//呼!我们有机器要尝试。将它们作为数组列表返回
//注意:我们应该考虑到偏好是绝对的
//正确。这是留给关心的人的练习。
ArrayList res=新的ArrayList();
namingumeration en=attr.getAll();
while(en.hasMore()){
字符串邮件主机;
字符串x=(字符串)en.next();
字符串f[]=x.split(“”);
//修复*************
如果(f.length==1)
mailhost=f[0];
else if(f[1].endsWith(“.”)
mailhost=f[1]。子字符串(0,(f[1]。长度()-1));
其他的
mailhost=f[1];
//修复方法******************
res.add(mailhost);
}
返回res;
}
公共静态布尔isAddressValid(字符串地址){
//查找域名的分隔符
int pos=地址.indexOf('@');
//如果地址不包含“@”,则它无效
如果(pos==-1)返回false;
//隔离域/计算机名并获取邮件交换器列表
字符串域=地址。子字符串(++pos);
ArrayList mxList=null;
试一试{
mxList=getMX(域);
}
捕获(NamingException-ex){
返回false;
}
//仅仅因为我们可以向域发送邮件,并不意味着
//地址是有效的,但如果我们不能,这是一个肯定的迹象,它不是
if(mxList.size()==0)返回false;
//现在,执行SMTP验证,尝试每个邮件交换器,直到
//肯定接受。一个MX可能允许
//一条消息[例如存储和转发器]和另一条[例如
//这就是为什么我们真的应该拒绝它
//考虑到偏好。
对于(intmx=0;mx