public function email($message = null)
    {
        $this->setRule(__FUNCTION__, function($email)
                       {
                           if (strlen($email) == 0) return true;
                           $isValid = true;
                           $atIndex = strrpos($email, '@');
                           if (is_bool($atIndex) && !$atIndex) {
                               $isValid = false;
                           } else {
                               $domain = substr($email, $atIndex+1);
                               $local = substr($email, 0, $atIndex);
                               $localLen = strlen($local);
                               $domainLen = strlen($domain);
                               if ($localLen < 1 || $localLen > 64) {
                                   $isValid = false;
                               }
                               else if ($domainLen < 1 || $domainLen > 255) {
                                   // domain part length exceeded
                                   $isValid = false;
                               }
                               else if ($local[0] == '.' || $local[$localLen-1] == '.') {
                                   // local part starts or ends with '.'
                                   $isValid = false;
                               }
                               else if (preg_match('/\\.\\./', $local)) {
                                   // local part has two consecutive dots
                                   $isValid = false;
                               }
                               else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
                                   // character not valid in domain part
                                   $isValid = false;
                               }
                               else if (preg_match('/\\.\\./', $domain)) {
                                   // domain part has two consecutive dots
                                   $isValid = false;
                               }
                               else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) {
                                   // character not valid in local part unless
                                   // local part is quoted
                                   if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) {
                                       $isValid = false;
                                   }
                               }
                               // check DNS
                               if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) {
                                   // hmm, the domain has no MX records
                                   if (checkdnsrr('gmail.com',"MX")) {
                                       // but Gmail does. the other domain must be dodgy
                                       $isValid = false;
                                   }
                                   // otherwise: probably running off-line or maybe DNS service is not working
                               }
                           }
                           return $isValid;
                       }, $message);
        return $this;
    }