java如何验证一个email地址是否真实有效。
发布网友
发布时间:2022-04-20 02:12
我来回答
共6个回答
懂视网
时间:2022-05-02 20:46
问题
由于业务上的需求,重新改写了校验email的正则表达式,同时DB里又迁移了其他数据库的数据,现在需要重新对DB里的所有email再校验一次,以排除掉不合法的email。
DB里的数据很多,手动去一个个校验的做法显然是不靠谱的,这种机械的重复性操作,自然是要用程序来解决才是最简易的。
做法
拼接字符串
首先是将DB里所有的email都拼接成一个字符串,由于用的是PostgreSQL,所以直接使用现有的字符串拼接函数string_agg()
。
具体用法如下:
select string_agg(email, ‘;‘) from cnt_user where is_latest;
大意就是拿到所有的最新版本的用户的email,以‘;‘作为间隔符,将这些email拼接起来,得到的结果就是:test1@qq.com;test2@qq.com...
在程序中进行校验
自己写一个测试类,把刚刚db查询到的字符串复制进来,通过String类的split()
将其进行切割成一个String数组,然后遍历该数组,通过正则表达式去一个个校验,将那些校验不通过的email给打印出来。
注意:这种方法不适用于email数量特别多的情况,如果String数组的大小超过3亿多,会报内存溢出OutOfMemoryError的错误。
大概的思路如下:
/** Regex for single EmailValidator */
public static final String SINGLE_EMAIL_REGEX = "(?:(?:[A-Za-z0-9\-_@!#$%&‘*+/=?^`{|}~]|(?:\\[\x00-\xFF]?)|"
+ "(?:"[\x00-\xFF]*"))+(?:\.(?:(?:[A-Za-z0-9\-_@!#$%&‘*+/=?^`{|}~])|(?:\\[\x00-\xFF]?)|"
+ "(?:"[\x00-\xFF]*"))+)*)@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+"
+ "(?:(?:[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*)(?:[A-Za-z0-9-]*[A-Za-z0-9])?))";
public static final Pattern SINGLE_EMAIL_REGEX_PATTERN = Pattern.compile(SINGLE_EMAIL_REGEX);
...
final String emailString = "******"; //DB里通过函数拼接起来的email字符串
final String[] emails = emailString.split(";");
for (final String email : emails) {
final Matcher matcher = SINGLE_EMAIL_REGEX_PATTERN.matcher(email);
if (!matcher.matches()) {
System.out.println("The email is invalid: " + email);
}
}
如果不合法的email有很多的话,还可以通过poi将这些email输出到一个文档中。
怎么快速对DB里的所有email进行校验
标签:pil 新版 mpi 正则表达式 final HERE sel int java
热心网友
时间:2022-05-02 17:54
首先使用java提供的格式类判断email是否格式有误,然后使用开源框架,验证邮箱是否有用,示例如下:
public static boolean checkEmail(String email) {
if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) {
return false;
}
String host = "";
String hostName = email.split("@")[1];
Record[] result = null;
SMTPClient client = new SMTPClient();
try {
// 查找MX记录
Lookup lookup = new Lookup(hostName, Type.MX);
lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL) {
return false;
} else {
result = lookup.getAnswers();
}
// 连接到邮箱服务器
for (int i = 0; i < result.length; i++) {
host = result[i].getAdditionalName().toString();
client.connect(host);
if (!SMTPReply.isPositiveCompletion(client.getReplyCode())) {
client.disconnect();
continue;
} else {
break;
}
}
//以下2项自己填写快速的,有效的邮箱
client.login("163.com");
client.setSender("sxgkwei@163.com");
client.addRecipient(email);
if (250 == client.getReplyCode()) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
client.disconnect();
} catch (IOException e) {
}
}
return false;
}
需要的jar支持:commons-net-2.2.jar,dnsjava-2.1.1.jar
热心网友
时间:2022-05-02 19:12
这个嘛我觉得是不可能的!首先你注册不同的email 是注册到不同网站的数据库中,各个网站不可能让你到他们的数据库中查找这个email 是否存在,所以你这个问题不存在!可以忽略!
热心网友
时间:2022-05-02 20:46
这个无法判断0 0.
如注册。只能首先使用正则表达式,要求正确输入。。然后程序发送电子邮件到输入的邮箱,进行二次确认,方可。这个时候对方就需要进入邮箱进行一系列操作。
只能这样。希望对你有帮助
热心网友
时间:2022-05-02 22:38
检测是不是合法的地址跟检测它是不是存在是两码事。是不是合法是由电子邮件是否符合email协议中定义的格式;是不是存在,是在合法的基础上看这个email是否已被注册。一般情况下看是否合法是比较常用的,其中用正则确实是比较公用的方法。而是否存在,这要分两种情况,1 对于该服务器来说,这个邮箱是否存在,这比较简单,就是查一下数据库中是否有相应的邮箱数据罢了,这可以用来检测该用户名是否在该server下注册了邮箱;另一种就是你说的我现在要发某一封邮件去一个邮箱,发之前我想确认一下该邮箱是否存在,这个就比较麻烦了,而且一般是作不到的,因为邮件server完全可以不提供相应的api给你,所以你也可以看到一般邮箱的认证就是发一封邮件到你邮箱里,让你自己登录去点某个链接去认证,所以你还是死心了吧。
热心网友
时间:2022-05-03 00:46
正则
java如何验证一个email地址是否真实有效。
首先使用java提供的格式类判断email是否格式有误,然后使用开源框架,验证邮箱是否有用,示例如下:public static boolean checkEmail(String email) { if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) { return false; } String host = ""; String ...
发送邮件api公司选哪个?
判断一个发送邮件api公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供...
java 验证邮箱是否存在
一般的验证是 验证邮件地址格式是否正确,如果你需要验证邮箱是否存在就需要发个邮件过去,即使发过去 你也不知道是否存在,除非有邮件返回。所以一般只是验证邮件格式是否正确就可以了。
...地址有效性的验证 1. 提示用户输入一个email地址,若用户的输入不合法...
好麻烦,直接用正则表达式来检查用户输入的e-mail规不规范,直接提示用户:“您输入的e-amil不符合规范“或者”邮箱输入不正确“就OK啦。或者是Struts框架,就直接建立validate.xml文件验证。一般检验都是放在前端用JS来检验,不管是JS还是Java,用邮箱的正则表达式来检验就行了 ...
如何引用java的这一个验证邮箱地址格式是否正确的类?
if(regexInput.emailFormat(txt_email.getText())){ }else{ dlg.messageDlg("您填写的Email格式错误,请核对后再修改!");//你确定本句能起作用吗?}
利用Java的字符串处理技术,编写一个验证Email地址合法性的程序_百度...
实现原理,实际上就是输入一个字符串,之后通过正则表达式验证此字符串是否符合邮箱的格式规范,通过以下工具类即可:import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegisterCheck { /** * 验证输入的邮箱格式是否符合 * @param email * @return 是否合法 ...
如何用java检验电子邮箱格式的合法性?要用到String的方法来判断_百度知 ...
自己写逻辑验证的方式可以做到。我写了下面的:public static boolean validateEmail(String email) { boolean flag = false;int pos = email.indexOf("@");if (pos == -1 || pos == 0 || pos == email.length() - 1) { return false;} String[] strings = email.split("@");if ...
java里进一步完善用户邮箱的合法性的验证!
public static boolean checkEmail(String email){boolean flag = false;try{String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";Pattern regex = Pattern.compile(check);Matcher matcher = regex.matcher(email...
如何使用java validation api进行参数校验
CreditCardNumber 对信用卡号进行一个大致的验证 DecimalMax 只能小于或等于该值 DecimalMin 只能大于或等于该值 Digits(integer=,fraction=) 检查是否是一种数字的整数、分数,小数位数的数字 Email 检查是否是一个有效的email地址 Future 检查该字段的日期是否是属于将来的日期 Length(mi...
问JAVA高手!在java中如何判断E-mail的格式是否正确,请给我一段正确的...
alert("密码不能少于6个字符!");return false;} if(form.npassword.value==""){ alert("请再次输入密码!");return false;} if(form.password.value!=form.npassword.value){ alert("两次输入密码不相同!");return false;} if(form.email.value=="" || !( /^[^@]+@[^@]+\.[^@...
...判断输入框里输入的是不是一个邮箱地址? 也就是大家平时用的邮箱登...
String emailPattern = "[0-9a-zA-Z_\\-]+@[0-9a-zA-Z_\\-]+(\\.[0-9a-zA-Z_\\-]+){1,}";System.out.println("12345".matches(emailPattern));System.out.println("czc@hotmail.com".matches(emailPattern));