This is an example of why I think it makes more sense to keep email validation simple. Better to get a fake email sent through than deny a customer's valid email.
For the most part, a domain name must start and end with an alphanumeric character. The dot something is probably 2-6 characters and alpha only (though that may change over time.) For now, you could do something more simple like:
if (preg_match("/^[a-z0-9][a-z0-9\.\-_]*@[a-z0-9][a-z0-9\.\-_]*[a-z0-9]\.[a-z]{2,6}$/g", $address))
{
//validate
}
which just means user part starts alphanumeric and then optional zero or more alphanumeric with optional dots, hyphens, and underscores followed by an "at" sign (@.) The same pattern then repeats, but the last letter of the domain name must be alphanumeric and then we have our 2 to 6 letter alpha top level domain name.
If that gives you woes, you could probably just make it something very lenient like:
if (preg_match("/^[a-z0-9\.\-_]+@[a-z0-9].*\.[a-z]{2,6}$/g", $address))
{
//validate
}
I should mention that these patterns were written quickly and are untested (although, they are probably good.)