java - 如何检测电子邮件地址是否真实
问题描述
重要的
我被hotmail服务屏蔽了。有一种叫做 spamhaus 的控制机制把我踢了出去。我现在被困住了。
我正在尝试检测一个电子邮件地址是否有效,如果它有效,然后检查该电子邮件地址是否可能被使用(我知道它不确定)。例如,假设有一个带有 domain 的网站myimaginarydomain.com
。如果我在下面运行代码,我想它不会失败,因为域地址是有效的。但是没有人可以使用该域的电子邮件地址。
有什么方法可以查出该电子邮件地址是否有效?(在这种情况下无效)
- 我不想发送确认电子邮件
- 发送 ping 可能有用吗?
public class Application {
private static EmailValidator validator = EmailValidator.getInstance();
public static void main(String[] args) {
while (true) {
Scanner scn = new Scanner(System.in);
String email = scn.nextLine();
boolean isValid = validateEmail(email);
System.out.println("Syntax is : " + isValid);
if (isValid) {
String domain = email.split("@")[1];
try {
int test = doLookup(domain);
System.out.println(domain + " has " + test + " mail servers");
} catch (NamingException e) {
System.out.println(domain + " has 0 mail servers");
}
}
}
}
private static boolean validateEmail(String email) {
return validator.isValid(email);
}
static int doLookup(String hostName) throws NamingException {
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial",
"com.sun.jndi.dns.DnsContextFactory");
DirContext ictx = new InitialDirContext(env);
Attributes attrs =
ictx.getAttributes(hostName, new String[]{"MX"});
Attribute attr = attrs.get("MX");
if (attr == null) return (0);
return (attr.size());
}
}
解决方案
在所有情况下都没有故障安全的方法来做到这一点,但是,假设服务器使用 SMTP,那么https://www.labnol.org/software/verify-email-address/18220/就一种方法提供了一个很好的教程,可能工作。
本教程中使用的方法依赖于操作系统工具,因此您需要在使用它们之前确保它们存在。可能会有所ProcessBuilder
帮助。或者,您可以直接在代码中打开套接字,避免使用依赖于操作系统的工具。
本质上,您找出邮件服务器是什么(使用 nslookup),然后 telnet 到其中一个邮件服务器并开始编写电子邮件:
3a:连接邮件服务器:
telnet gmail-smtp-in.l.google.com 25
3b:向其他服务器问好
HELO
3c:用一些虚构的电子邮件地址来表明自己的身份
mail from:<labnol@labnol.org>
3d:输入您要验证的收件人的电子邮件地址:
rcpt to:<billgates@gmail.com>
命令的服务器响应
rcpt to
将使您了解电子邮件地址是否有效。如果地址存在,您会得到“OK”,否则会出现 550 错误
推荐阅读
- wordpress - 有没有办法手动触发 WordPress 的心跳
- optimization - 在 NN 中对输入层的权重施加约束
- angular - Angular 11 无法路由到命名出口
- php - Codeigniter Joins:基于连接查询的结果格式
- jquery - 在jquery中获取给定月份的最后一天
- python - 使用队列实现 Kafka 生产者消费者聊天
- javascript - 以最低的变化索引从下到上对数组进行排序
- node.js - npm 错误!cb() 从未调用过!尝试创建反应应用程序时
- python - Plotly:如何在 plotly.express.imshow 中定义着色和图例的自定义步骤?
- excel - 仅检查字母数字