Java Code to validate email addresses
Simple code to validate email addresses before they are sent
com/aspc/remote/util/net/EmailUtil.java |
public final class EmailUtil { /** * http://www.regular-expressions.info/email.html */ @RegEx private static final Pattern EMAIL_PATTERN = Pattern.compile( "^[A-Z0-9._%+\\-#']+@[A-Z0-9.-]+\\.(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$", Pattern.CASE_INSENSITIVE); /** * Validate an email address. * * @param email the email to validate. * @param hostCache OPTIONAL cache of host names * @throws InvalidDataException details of the issue found. */ public static void validate(final String email, final Map<String, String> hostCache) throws InvalidDataException { String invalidStrings[] = { "..", ".@" }; for (String illegal : invalidStrings) { if (email.contains(illegal)) { throw new InvalidDataException("email " + email + " may not contain '" + illegal + "'"); } } Matcher m = EMAIL_PATTERN.matcher(email.trim()); if (m.matches() == false) { throw new InvalidDataException(email + " invalid email"); } String[] split = email.split("@"); if (split.length != 2) { throw new InvalidDataException("no @ symbol"); } String tmpHost = split[1]; String message = checkMX(tmpHost, null); if (message != null) { throw new InvalidDataException(message); } } /** * check the MX record * * @param hostName host to check * @param hostCache OPTIONAL cache of host names * @return message if NOT valid otherwise NULL */ public static String checkMX(final String hostName, final Map<String, String> hostCache) { String message = null; if (hostCache != null) { message = hostCache.get(hostName); } if (message == null) { @SuppressWarnings("UseOfObsoleteCollectionType") Hashtable env = new Hashtable(); env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); try { DirContext ictx = new InitialDirContext(env); Attributes attrs = ictx.getAttributes(hostName, new String[] { "MX" }); Attribute attr = attrs.get("MX"); if (attr == null) { message = "no MX record for " + hostName; } else if (attr.size() > 0) { message = ""; } else { message = "no MX record for " + hostName; } } catch (NamingException e) { message = e.getMessage(); } if (hostCache != null) { hostCache.put(hostName, message); } } if (message == null || message.isEmpty()) { return null; } return message; } }