`
HogwartsRow
  • 浏览: 57931 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Email Verifier Util

阅读更多
public class VerifyEmailUtil {
	
	private static Logger logger = LoggerFactory.getLogger(VerifyEmailUtil.class);

	private static final String EMAIL_REGEX = new StringBuffer().append("^([a-zA-Z0-9_.+-]").append("|").append("[")
			.append("`").append("~").append("!").append("#").append("$").append("%").append("^").append("&").append("*").append("=")
			.append(",").append(".").append("<").append(">").append(";").append(":").append("'").append("\"").append("")
			.append("\\[").append("\\]").append("\\(").append("\\)").append("\\{").append("\\}").append("\\|").append("\\").append("\\/")
			.append("]").append(")+").append("@(([a-zA-Z0-9-])+.)+").append("([a-zA-Z0-9]{2,4})+$").toString();
			
	//"^([a-zA-Z0-9_.+-]|[*`~!#%&=,.<>;:'"?$^\[\]\(\)\{\}\|\\\/])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$";
	
	private static final String EMAIL_DOMAIN_REGEX = "@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";
	
	private static Record[] records = null;
	
	private static List<String> domainWhiteList = null;
	
	static {
		domainWhiteList = Arrays.asList(ConfigProperties.getInstance().getValue("domain_whitelist").split(","));
	}
	
	/**
	 * 语法检验
	 * @param email
	 * @return
	 */
	public static boolean isValidFormat(String email) {
		if (StringUtils.isEmpty(email)) {
			return false;
		}
		if (Pattern.matches(EMAIL_REGEX, email)) {
			// 语法校验通过
			return true;
		} else {
			// 语法校验未通过
			return false;
		}
	}
	
	/**
	 * 域名语法校验
	 * @param domain
	 * @return
	 */
	public static boolean isValidDomainFormat(String domain) {
		if (StringUtils.isEmpty(domain)) {
			return false;
		}
		if (Pattern.matches(EMAIL_DOMAIN_REGEX, domain)) {
			// 语法校验通过
			return true;
		} else {
			// 语法校验未通过
			return false;
		}
	}
	
	/**
	 * 是否存在白名单种
	 * @param domain
	 * @return
	 */
	public static boolean isInDomainWhiteList(String domain) {
		if (domainWhiteList.contains(domain)) {
			return true;// 存在域名白名单中,直接跳过
		} 
		return false;
	}
	
	/**
	 * MX记录分析
	 * @param email
	 * @return
	 */
	public static boolean isValidDomain(String email) {
		String domain = email.split(StringConstant.AT)[1].toLowerCase();
		Lookup lookup = null;
		try {
			lookup = new Lookup(domain, Type.MX);
		} catch (TextParseException e) {
			logger.error(e.getMessage(), e);
		}
		lookup.run();
		if (lookup.getResult() != Lookup.SUCCESSFUL) {
			// 找不到MX记录
			logger.info(domain + "'s mx not exists.");
			return false;
		} else {
			// MX记录存在
			logger.info(domain + "'s mx exists.");
			records = lookup.getAnswers();
			/*if (!ArrayUtils.isEmpty(records)) {
				for (Record record : records) {
					logger.info(email + "'s MX record: " + record.getAdditionalName().toString());
				}
			}*/
			return true;
		}
	}
	
	/**
	 * SMTP
	 * @param email
	 * @return
	 */
	public static boolean isValidUser(String email) {
		final String SENDER_EMAIL = "no-reply@qq.com";
		final String SENDER_EMAIL_DOMAIN = SENDER_EMAIL.split(StringConstant.AT)[1];
		if (!ArrayUtils.isEmpty(records)) {
			int count = 0;// 计数器
			SMTPClient client = new SMTPClient(); 
			for (Record record : records) {
				String hostname =  record.getAdditionalName().toString();
				try {
					client.connect(hostname);// 连接到接收邮箱地址的邮箱服务器  
				} catch (Exception e) {
					count++;
					if (count >= records.length) {
						// 如果由MX得到的result服务器都连接不上,则判定email无效
						return false;
					}
				}
				if (!SMTPReply.isPositiveCompletion(client.getReplyCode())) {
					// 服务器通信失败
					try {
						client.disconnect();
						continue;
					} catch (Exception e) {
						logger.error(e.getMessage(), e);
					}
				} else {
					logger.info("MX record about " + hostname + "exists. ");
					logger.info("Connection succeeded to " + hostname + " SMTP.");
					logger.info(client.getReplyString());
					try {
						client.login(SENDER_EMAIL_DOMAIN);
						logger.info("> HELO " + hostname);
						logger.info(client.getReplyString());
						client.setSender(SENDER_EMAIL);
						if (client.getReplyCode() != 250) {
							client.disconnect();
							continue;
						}
					} catch (Exception e) {
						logger.error(e.getMessage(), e);
					}
					logger.info("> MAIL FROM: <" + SENDER_EMAIL + ">");
					logger.info(client.getReplyString());
					try {
						client.disconnect();
						continue;
					} catch (Exception e) {
						logger.error(e.getMessage(), e);
					}
					logger.info("> RCPT TO: <" + email + ">");
					logger.info(client.getReplyString());
					
					if (client.getReplyCode() == 250) {
						// SMTP通讯成功
						return true;
					}
					try {
						client.disconnect();
						continue;
					} catch (Exception e) {
						logger.error(e.getMessage(), e);
					}
				}
			}
		} else {
			// SMTP失败
			return false;
		}
		return false;
	}
	
	public static void main(String[] args) {
		System.out.println(isValidFormat("*********@qq.com"));
		System.out.println(isValidFormat("$---@qq.com"));
		System.out.println(isValidFormat("#*****$@qq.com"));
		System.out.println(isValidFormat("!123******@qq.com"));
		System.out.println(isValidDomain("@qq.com"));
		System.out.println(isValidDomainFormat("@aapindustries.com.au"));
	}
}

 

0
0
分享到:
评论

相关推荐

    Fast Email Verifier 邮箱验证

    Fast Email Verifier 邮箱验证 很好用

    Fast Email Verifier.rar

    当我们从互联网上搜集到大量邮箱地址,但是不知道它们是否真实存在、正确与否,这时候我们就需要一个邮箱验证工具给以测试,Fast Email Verifier由此孕育而生

    fast email verifier邮箱验证工具

    发信前对目标邮箱进行测试,看是否可用,自己看,需要的可以下一下

    Fast Email Verifier 邮箱验证.7z

    网上搜集到大量邮箱地址,但是我们不知道它们是否真实存在、正确与否,这时候我们就需要一个邮箱验证工具给以测试。给大家推荐一款十分好用的邮箱验证工具,准确率非常高。

    fast email verifier

    Fast Email Verifier quickly and easily verifies email addresses in databases, address books, spreadsheets or any other mailing list. The product is based on the latest .Net technology and can find ...

    GSA Email Verifier v3.7.3.zip

    GSA Email Verifier是一款简单好用的电子邮件处理软件。软件可以实现验证验证电子邮件地址从邮寄名单、清理您的邮寄地址和联络人清单、删除无效的电子邮件等诸多功能。软件界面美观简洁、简单全面、实用方便,可快速...

    Free Email Verifier-crx插件

    -开箱即用的Google表格和Microsoft Excel集成,可直接从电子表格内部查询Email Verifier API。 -检测跳动,垃圾邮件陷阱,蜜罐,投诉人,一次性用品,角色帐户,免费提供者,冒犯性的言语等等。

    simple email verifier-开源

    简单的电子邮件验证器是 PHP 脚本,使用 Trumail API 来验证批量电子邮件... 通过 JSON 收集的数据和数据交付格式为 CSV。... 上传文件并在地址栏中打开相同的位置。 选择文本文件。... 在进程完成之前不要关闭浏览器窗口。...

    1st Email Address Verifier 5.44

    1st Email Address Verifier 是一个快速验证email地址的软件。包含注册机。

    检测邮件地址是否真实存在的小工具_eMail Verifier

    检测邮件地址是否真实存在的小工具,这个工具是要注册的,由于在网上好些地方下不下来,现在发给大家,我个人感觉不是很理想,却找不到更理想的了。

    email-verifier:Go库用于电子邮件验证,无需发送任何电子邮件

    go get -u github.com/AfterShip/email-verifier 用法 基本用法 使用Verify方法来验证具有不同尺寸的电子邮件地址 package main import ( "fmt" "github.com/AfterShip/email-verifier" ) var ( verifier = ...

    Email Verifier-crx插件

    MailDump Verifier,一个功能强大的工具,可在您浏览网站时帮助您验证电子邮件地址或批量验证电子邮件地址。 MailDump验证程序可删除无效的电子邮件地址并降低跳出率,因此您不必在将电子邮件发送到不存在的电子邮件...

    Android CTS Verifier 测试手册

    该文档是由展讯下发的CTS Verifier指导文档,按照上面的指导去操作就能测完Verifier测试

    Application Verifier PC端工具包

    Application Verifier PC端工具包,可用于连接wince5.0的内存泄漏检测工具。

    usb audio cts verifier tests

    usb audio cts verifier tests usb audio cts verifier tests

    android-cts-verifier

    google cts verifier的测试的包,因为需要出去下,所以分享给大家

    MD5Verifier.exe

    MD5Verifier.exe是一个功能强大的MD5码计算工具,小巧易用,绿色不用安装

Global site tag (gtag.js) - Google Analytics