`
HogwartsRow
  • 浏览: 59510 次
  • 性别: 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 邮箱验证

    《Fast Email Verifier:高效邮箱验证工具的深度解析》 在现代商业环境中,电子邮件作为重要的沟通渠道,其有效性直接影响到营销策略的成功与否。因此,确保邮件列表中的邮箱地址真实有效显得至关重要。Fast Email ...

    Fast Email Verifier.rar

    《Fast Email Verifier:高效邮箱验证工具的深度解析》 在现代数字通信中,电子邮件作为重要的通讯手段,其有效性与准确性至关重要。然而,当我们通过网络搜集到大量的邮箱地址时,如何确保这些地址真实有效,避免...

    Fast Email Verifier 邮箱验证.7z

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

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

    "eMail Verifier" 就是一款这样的工具,它专门设计用于检测邮件地址的真实有效性。这款工具允许用户批量检查电子邮件地址,以避免无效、错误或者不存在的地址导致的邮件退回、降低发送信誉等问题。 邮件地址验证...

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

    1st Email Address Verifier 5.44

    《1st Email Address Verifier 5.44:高效邮箱验证工具详解》 在数字化通讯时代,电子邮件(Email)作为重要的商务和个人沟通渠道,其管理与有效性验证显得尤为重要。1st Email Address Verifier 5.44是一款专为...

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

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

    Free Email Verifier-crx插件

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

    simple email verifier-开源

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

    Email Verifier-crx插件

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

    driver verifier使用指南.pdf

    Driver Verifier工具是微软提供的一种强化测试机制,用于在发布驱动之前找出潜在的错误和问题。本指南将详细阐述如何使用Driver Verifier进行驱动测试,并解决在测试过程中可能遇到的问题。 **Driver Verifier** ...

    windows7 driver verifier 文档

    Windows 7 Driver Verifier 是一个强大的工具,专为Windows 7操作系统设计,用于检测和诊断驱动程序中的错误、不合规性和潜在问题。它通过施加压力测试和额外的验证检查来确保驱动程序在各种极端情况下都能正常运行...

    Android CTS Verifier 测试手册

    CTS Verifier测试手册是针对Android设备制造商和开发者进行兼容性测试的一个重要文档。CTS即Compatibility Test Suite,而CTS Verifier是为了补充CTS测试,提供了一系列额外的手动测试项,以帮助开发者和制造商验证...

    CTS Verifier7.1源码

    CTS Verifier是CTS中的一个子项目,它的主要任务是提供一系列测试用例,确保Android应用在不同设备上运行时的行为一致性,从而保证整个Android生态系统的兼容性和稳定性。 在"CTS Verifier 7.1版本的源码"中,我们...

    Application Verifier For Wince5.0

    "Application Verifier For Wince5.0"是一款专为Windows CE 5.0设计的内存泄漏监控工具,它帮助开发者识别和解决应用程序中的内存问题,提高软件质量。 内存泄漏是编程中常见的问题,当程序分配了内存但未能正确...

    android-cts-verifier

    "Android CTS Verifier"是谷歌为Android兼容性测试套件(Compatibility Test Suite)提供的一部分,主要用于确保设备和应用程序能够遵循Android平台的兼容性规范。这个测试包是开发者和硬件制造商进行系统验证的重要...

    Application Verifier PC端工具包

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

    Application Verifier

    对于Windows CE/Windows Mobile开发,微软已经为我们提供了很好的工具Application Verifier。AppVerifier是一个辅助开发工具,不用修改代码,可以检测出程序内存,句柄, GDI对象泄漏,并报告分配泄漏对象的调用栈,有...

Global site tag (gtag.js) - Google Analytics