假设我的电子邮件地址为xyz@yahoo.com
,我想检查yahoo.com
是否为有效域。
有谁可以告诉我我可以使用哪种Java API?
答案 0 :(得分:7)
InetAddress
具有getByName()
方法来确定主机的IP地址。
如果找不到主机的IP地址(如果给定的主机名无效),则会抛出UnknownHostException
。
因此,您只需在调用UnknownHostException
时尝试抓住InetAddress.getByName()
。如果捕获UnknownHostException
,则表示您的输入主机名无效。
答案 1 :(得分:4)
你可以做的一件事是试图解决“yahoo.com”。像这样:
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress = InetAddress.getByName("yahoo.com");
System.out.println(inetAddress.getHostName());
System.out.println(inetAddress.getHostAddress());
}
输出:
yahoo.com
67.195.160.76
答案 2 :(得分:1)
另一种可能性是检查entred域的MX。
http://www.mxtoolbox.com/SuperTool.aspx
它不是Java API,但您始终可以解析HTML响应。
这意味着如果邮件服务的提供者未被列入黑名单,那么它可能是安全的并且是真实的地址。
但正如已经说过的,某些服务器总是可以为这种服务定义安全限制。
另一点是,存在一些提供临时电子邮件的服务(mailinator.com,jetable.org等等)如果您想阻止用户注册这样的电子邮件,您还必须检查这些域名。
<强>更新强>
我发现useful REST API似乎是免费的,只要你使用有限数量的请求。
示例:https://dns-api.org/MX/amazon.com返回JSON:
[
{
"name" : "amazon.com",
"ttl" : 677,
"value" : "5 amazon-smtp.amazon.com.",
"type" : "MX"
}
]
答案 3 :(得分:1)
您可以使用org.apache.commons.validator.routines.DomainValidator。
首先添加maven依赖
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.6</version>
</dependency>
然后:
boolean isValid = DomainValidator.getInstance().isValid("yahoo.com");
答案 4 :(得分:-1)
我不知道这是否是最好的方式,但我为VB.NET程序做了类似的事情:
我刚刚ping了域名,如果我没有收到回复,域名要么已离线,要么不存在。