2012-04-07 94 views
3

我如何验证电子邮件地址的域部分?我需要首先列出我的java类中的现有域,否则java的InternetAddress.validate()将默认执行它?我已经使用这个:在java中验证电子邮件地址

public static boolean verifyEmailAddress(String regEmail) { 
    boolean result = true; 
    try { 
     InternetAddress emailAddr = new InternetAddress(regEmail); 
     emailAddr.validate(); 
    } catch (AddressException ex) { 
     result = false; 
    } 
    return result; 
} 

的用request.getParameter有一个电子邮件地址,并存储在regEmail .. 问题是,即使是无效的电子邮件像[email protected]其显示有效..究竟是什么我需要做的..帮助我...而且这个功能对那些使用过它并经过测试的人来说工作正常吗?

+0

请记住接受有用的答案。 – rekire 2012-04-07 06:06:14

回答

1

我不知道Java中是否有自动方式。但我会查找该域的MX记录。如果存在MX记录,该域可能会收到邮件。更多信息请参阅this page

3

我认为你从错误的角度来看待问题。从您的应用程序角度来看,如果电子邮件可以接收邮件,则应将其视为有效(更好,有用)。这就是为什么所有这些论坛不断发送给你激活邮件的原因:)你应该发送一些随机字符串到每个新的电子邮件地址,并保持它在隔离状态,直到用户可以证明他读取秘密。

这是因为该领域可能存在,甚至MX记录该域可以在DNS存在,但这些条件都不能够保证该地址是有效 - 再次,当你验证一些你真的说明它可以稍后在你的代码中用于某种目的,并且电子邮件地址的目的是接收邮件

0

我认为没有确切的方法来验证它。我们所能做的就是模仿这个模式,或者更多的是通过邮件域来访问hhhgggmail.com。但你怎么能证明“[email protected]确实存在”?

SMTP确实有'VEFY'命令,但出于安全原因,几乎所有smtp服务器都没有执行此命令。

哦,你想要vefy域名。所有的smtp服务器都需要一个mx dns记录。你可以使用dnsjava模块来验证它。代码为:

public static MXRecord digOptimalMxRecords(String domainName) throws TextParseException { 
     List<MXRecord> records = DNSHelper.digMxRecords(domainName); 
     if (CollectionUtils.isNotEmpty(records)) { 
      Collections.sort(records, new Comparator<MXRecord>() { 
       @Override 
       public int compare(MXRecord o1, MXRecord o2) { 
        return o2.getPriority() - o1.getPriority(); 
       } 
      }); 
      return records.get(0); 
     } 
     return null; 
    } 

public static List<MXRecord> digMxRecords(String domainName) throws TextParseException { 
    List<MXRecord> list = new ArrayList<MXRecord>(); 
    Lookup mxLookupper = new Lookup(domainName, Type.MX); 
    mxLookupper.run(); 
    if (mxLookupper.getResult() == Lookup.SUCCESSFUL) { 
     Record[] answers = mxLookupper.getAnswers(); 
     for (Record record : answers) { 
      list.add((MXRecord) record); 
     } 
    } 
    return list; 
} 
+0

哦,你想要vefy域名。所有的smtp服务器都需要一个mx dns记录。你可以使用dnsjava模块来验证它。 – Five 2012-04-09 03:30:40