How to verify an Email Domain in Java and Coldfusion
Often people will submit junk email addresses such as wwqewq@dasds.com . While this method is not perfect because some email sites do not allow query and some SMTP sites are hidden, it will allow you to at least mark these addresses as potentially bad. I usually will save them in a pending table and manually check them once in a while.
Here is a Java class that can do this job for you.
import java.util.Hashtable;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class AddressCheck {
private String addr;
private boolean isLegitAddress;
public AddressCheck() {
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public boolean isLegitAddress() {
return isLegitAddress;
}
public void setLegitAddress(boolean isLegitAddress) {
this.isLegitAddress = isLegitAddress;
}
public boolean isReachable(){
Hashtable env = new Hashtable();
env.put(“java.naming.factory.initial”,”com.sun.jndi.dns.DnsContextFactory”);
DirContext ictx;
try {
ictx = new InitialDirContext(env);
Attributes attrs = ictx.getAttributes(getAddr(), new String[] { “MX” });
Attribute attr = attrs.get(“MX”);
if (attr == null) {
setLegitAddress(false);
} else {
setLegitAddress(true);
}
} catch (NamingException e1) {
setLegitAddress(false);
}
return isLegitAddress();
}
}
This can be converted to be used in Coldfusion as well but a word of warning. This will not run on sites that are only running Coldfusion using the JRE. The site must also use the Java SDK. If you are using a shared environment on a host site, it probably will not work. I have tried it on two common hosting sites and they were unwilling to install the JDK. It does work on my local machine where I run CF 8 under tomcat.
You can add this function to a cfc:
<cffunction name=”isDomainValid” returntype=”boolean” output=”true”>
<cfargument name=”emailaddress” required=”Yes” type=”string”>
<cfset atLoc=#Find(“@”,arguments.emailaddress)#>
<cfset env = CreateObject(“java”, “java.util.Hashtable”)>
<cfset env.put(“java.naming.factory.initial”, “com.sun.jndi.dns.DnsContextFactory”)>
<cfset dirContext = CreateObject(“java”, “javax.naming.directory.InitialDirContext”)>
<cfset dirContext.init(env)>
<cfset valid=false>
<cftry>
<cfset env.put(“java.naming.provider.url”, “google.com”)>
<cfset env.put(“com.sun.jndi.dns.timeout.initial”, “2000″)>
<cfset env.put(“com.sun.jndi.dns.timeout.retries”, “3″)>
<cfset type = ArrayNew(1)>
<cfset type[1] = “MX”>
<cfset attributes = dirContext.getAttributes(“#Mid(email, atLoc + 1, Len(email))#”, type)>
<cfset atribEnum = attributes.get(“MX”)>
<cfset enum =#atribEnum.getAll()#>
<cfloop condition=”#enum.hasMore()#”>
<cfset attribute = Enum.next()>
<cfset valid=true>
</cfloop>
<cfcatch>
<cfset valid=false>
</cfcatch>
</cftry>
<cfreturn valid>
</cffunction>