Here is the code for a Validator class:
package com.devdaily.opensource.web.util;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
import java.util.StringTokenizer;
public class Validator
{
public static boolean isValidEmailAddress(String emailAddress)
{
// a null string is invalid
if ( emailAddress == null ) return false;
// a string without an @ symbol is an invalid email address
if ( emailAddress.indexOf("@") < 0 ) return false;
// a string without an @ symbol is an invalid email address
if ( emailAddress.indexOf(".") < 0 ) return false;
if ( lastEmailFieldTwoCharsOrMore(emailAddress) == false ) return false;
try
{
InternetAddress internetAddress = new InternetAddress(emailAddress);
System.err.println( "Address is GOOD: " + emailAddress );
return true;
}
catch (AddressException ae)
{
System.err.println( "Address is BAD: " + emailAddress );
return false;
}
}
/**
* Returns true if the last email field (i.e., the country code, or something
* like .com, .biz, .cc, etc.) is two chars or more in length, which it really
* must be to be legal.
*/
private static boolean lastEmailFieldTwoCharsOrMore(String emailAddress)
{
StringTokenizer st = new StringTokenizer(emailAddress,".");
String lastToken = null;
while ( st.hasMoreTokens() )
{
lastToken = st.nextToken();
}
if ( lastToken.length() >= 2 )
{
return true;
}
else
{
return false;
}
}
}
Here is the code for the EmailAddressValidatorTests class:
package com.devdaily.opensource.web.utilTest;
import junit.framework.*;
import com.devdaily.opensource.web.util.Validator;
public class EmailAddressValidatorTests extends TestCase
{
/**
* Set up work to be done before test cases.
*/
protected void setUp()
{
}
/**
* do a tear down after each test
*/
protected void tearDown()
{
}
public void testAla()
{
String address = "ala@missiondata.com";
boolean expectedResult = true;
boolean actualResult = Validator.isValidEmailAddress(address);
assert( "\ntestAla, EXPECTED: " + expectedResult + ", GOT: " + actualResult,
(expectedResult==actualResult) );
}
public void testBlank()
{
String address = "";
boolean expectedResult = false;
boolean actualResult = Validator.isValidEmailAddress(address);
assert( "\ntestBlank, EXPECTED: " + expectedResult + ", GOT: " + actualResult,
(expectedResult==actualResult) );
}
public void testNull()
{
String address = null;
boolean expectedResult = false;
boolean actualResult = Validator.isValidEmailAddress(address);
assert( "\ntestBlank, EXPECTED: " + expectedResult + ", GOT: " + actualResult,
(expectedResult==actualResult) );
}
public void testAtSymbols()
{
assert( "\ntestAtSymbols1", !Validator.isValidEmailAddress("@") );
assert( "\ntestAtSymbols2", !Validator.isValidEmailAddress("@devdaily") );
assert( "\ntestAtSymbols3", !Validator.isValidEmailAddress("@devdaily.com") );
assert( "\ntestAtSymbols4", !Validator.isValidEmailAddress(" @devdaily.com") );
assert( "\ntestAtSymbols5", !Validator.isValidEmailAddress("al @devdaily.com") );
assert( "\ntestAtSymbols6", !Validator.isValidEmailAddress("@devdaily .com") );
assert( "\ntestAtSymbols7", !Validator.isValidEmailAddress("@devdaily. com") );
assert( "\ntestAtSymbols8", !Validator.isValidEmailAddress("al@devdaily") );
assert( "\ntestAtSymbols9", !Validator.isValidEmailAddress("al@ devdaily") );
}
public void testSingleName()
{
assert( "\ntestSingleName1", !Validator.isValidEmailAddress("al") );
assert( "\ntestSingleName2", !Validator.isValidEmailAddress("frankenstein") );
}
public void testlongBlank()
{
assert( "\ntestlongBlank1", !Validator.isValidEmailAddress(" ") );
assert( "\ntestlongBlank2", !Validator.isValidEmailAddress(" ") );
assert( "\ntestlongBlank3", !Validator.isValidEmailAddress(" ") );
}
public void testCrazyStuff()
{
assert( "\ntestCrazyStuff1", !Validator.isValidEmailAddress(".@") );
assert( "\ntestCrazyStuff2", !Validator.isValidEmailAddress("@.") );
assert( "\ntestCrazyStuff3", !Validator.isValidEmailAddress("@.@.@.@.") );
assert( "\ntestCrazyStuff4", !Validator.isValidEmailAddress("a@b.c") );
assert( "\ntestCrazyStuff5", !Validator.isValidEmailAddress("alvinjalexander@yahoo.c") );
assert( "\ntestCrazyStuff6", !Validator.isValidEmailAddress("@@@.cc") );
assert( "\ntestCrazyStuff7", !Validator.isValidEmailAddress("ala@orange@missiondata.com") );
}
public void testIpAddresses()
{
//assert( "\ntestIpAddresses", Validator.isValidEmailAddress("chriss@127.0.0.1") );
}
public static void main(String args[])
{
junit.textui.TestRunner.run(EmailAddressValidatorTests.class);
}
public EmailAddressValidatorTests(String name)
{
super(name);
}
/**
* add one line here for each test in the suite
*/
public static Test suite()
{
TestSuite suite = new TestSuite();
// run tests manually
//suite.addTest( new ValidatorTests("testNumericAddress1") );
//return suite;
// or, run tests dynamically
return new TestSuite(EmailAddressValidatorTests.class);
}
}