com/aspc/remote/util/net/EmailUtil.java |
public final class EmailUtil
{
@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
@param hostCache
@throws
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
@param hostCache
@return
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;
}
}